php【微信支付】企业付款到零钱
浏览量:404
最近负责楚楚街各种活动,新作的瓜分红包功能,达到条件后直接把钱打到用户微信零钱里面。
微信文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1
自己写了一个小例子,实现方式:
<?php
define("MCHAPPID","wx*************");//商户的应用appid
define("MCHID","12***************");//商户ID
define("NAMEOPENID","oi**************");//用户openid
define("MD5KEY", "QL*******************"); //支付密钥签名
$data = array(
"check_name"=>"FORCE_CHECK",
"re_user_name"=>"梁慧菊",
"openid" => NAMEOPENID,
"amount" => 100,
"desc" => "测试瓜分红包,企业站直接付款到余额",
);
echo "<pre>";
$res = sendPacket_f($data);
var_dump($res);
die();
/**
* 企业账户直接打钱到微信
* @return mixed
* author :lianghuiju@chuchujie.com
* function_name : sendPacket_f
* datetime : 2018/7/19
* description :
*/
function sendPacket_f($data) {
$check_name = $data['check_name'];
$re_user_name = $data['re_user_name'];
$openid = $data['openid'];
$amount = $data['amount'];
$desc = $data['desc'];
if(empty($openid) || empty($amount) || empty($amount)){
$dataRes = array(
"return_code"=> "SUCCESS",
"return_msg"=> "参数错误:输入的商户号有误",
"result_code"=> "FAIL",
"err_msg"=> $data
);
return $dataRes;
}
$data['check_name'] = $check_name;//NO_CHEC不用验证真实姓名,FORCE_CHECK验证真实姓名;这个是设置是否检测用户真实姓名的
$data['re_user_name'] = $re_user_name;//用户的真实名字
$time = time();
$partner_trade_no = 'FA' . $time . mt_rand(100, 10000);
$data['mch_appid'] = MCHAPPID;
$data['mchid'] = MCHID;
$data['nonce_str'] = unicode();//字符串算法
$data['partner_trade_no'] = $partner_trade_no;//订单号。
$data['openid'] = $openid;//用户的openid
$data['amount'] = $amount;//提现金额 分
$data['desc'] = $desc ? $desc : '楚楚街活动红包';//订单描述
$data['spbill_create_ip'] = $_SERVER['SERVER_ADDR'];//服务器的ip
$data['sign'] = _encode($data);//这个就是个码API密。32位的MD5
$xml = arraytoxml($data);
$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
$res = curl($xml, $url);
$return = xmltoarray($res);
return $return;
}
/**
* 唯一的字符串算法
* @return string
* author :lianghuiju@chuchujie.com
* function_name : unicode
* datetime : 2018/7/19
* description :
*/
function unicode() {
$str = uniqid(mt_rand(), 1);
$str = sha1($str);
return md5($str);
}
/**
* 数组传为xml字符串
* @param $data
* @return string
* author :lianghuiju@chuchujie.com
* function_name : arraytoxml
* datetime : 2018/7/19
* description :
*/
function arraytoxml($data) {
$str = '<xml>';
foreach ($data as $k => $v) {
$str .= '<' . $k . '>' . $v . '</' . $k . '>';
}
$str .= '</xml>';
return $str;
}
/**
* 字符串xml转化成数组
* @param $xml
* @return mixed
* author :lianghuiju@chuchujie.com
* function_name : xmltoarray
* datetime : 2018/7/19
* description :
*/
function xmltoarray($xml) {
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
$val = json_decode(json_encode($xmlstring), true);
return $val;
}
/**
* curl请求
* @param string $param
* @param $url
* @return mixed
* author :lianghuiju@chuchujie.com
* function_name : curl
* datetime : 2018/7/19
* description :
*/
function curl($param = "", $url) {
$postUrl = $url;
$curlPost = $param;
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_URL, $postUrl); //抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0); //设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1); //post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); // 增加 HTTP Header(头)里的字段
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 终止从服务端进行验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSLCERT, getcwd() . '/cert/apiclient_cert.pem'); //这个是证书的位置
curl_setopt($ch, CURLOPT_SSLKEY, getcwd() . '/cert/apiclient_key.pem'); //这个也是证书的位置
$data = curl_exec($ch); //运行curl
curl_close($ch);
return $data;
}
/**
* 加密函数
* @param 请求的参数
* @return string 加密串
*/
function _encode($data) {
//签名步骤一:按字典序排序参数
ksort($data);
$buff = "";
foreach ($data as $k => $v) {
if ($k != "sign" && $v != "" && !is_array($v)) {
$buff .= $k . "=" . $v . "&";
}
}
$string = trim($buff, "&");
//签名步骤二:在string后加入KEY
$string = $string . "&key=".MD5KEY;
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
return $result;
}
神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。