首先在微信商户开通此功能(开通可能不易)

拿到  商户号   证书 还有证书序列号   关联商户的appid(如果是app在开放平台申请appid小程序的话那就是小程序的appid)   注意一定要关联appid   

在微信商户号里   开通 api 权限 以及添加服务器的ip

上代码

public function zhuanzhang()

{

$post_data = [

"appid" => 'wx0b468e83f769fc09',//appid

"out_batch_no" => 'wlss'.date('YmdHis').mt_rand(100000, 999900),//商家批次单号

"batch_name" => '提现到账',//批次名称

"batch_remark" => '提现到账',//批次备注

"total_amount" => intval(strval($params['money'] * 100)),// 转账金额单位为“分”

"total_num" => 1, // 转账总笔数

//此处可以多笔提现 组合二维数组放到transfer_detail_list即可 我这里单笔操作,写死了

"transfer_detail_list" => [

[

'out_detail_no' => 'wlss'.date('YmdHis').mt_rand(100000, 999900),

'transfer_amount' => intval(strval($params['money'] * 100)),

'transfer_remark' => '提现到账',

'openid' => $openid,

]

]

];

$url = 'https://api.mch.weixin.qq.com/v3/transfer/batches';

$result = self::wx_post($url, json_encode($post_data,

JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE));

$result = json_decode($result, true);

if(isset($result['code'])){

$this->error($result['massage']);

}

}

public static function wx_post($url, $param)

{

$authorization = self::getV3Sign($url, "POST", $param);

$curl = curl_init();

$headers = [

'Authorization:' . $authorization,

'Accept:application/json',

'Content-Type:application/json;charset=utf-8',

'User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',

];

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_TIMEOUT, 500);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_POSTFIELDS, $param);

curl_setopt($curl, CURLOPT_POST, true);

$res = curl_exec($curl);

curl_close($curl);

return $res;

}

public static function getV3Sign($url, $http_method, $body)

{

$nonce = strtoupper(self::createNonceStr(32));

$timestamp = time();

$url_parts = parse_url($url);

$canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : ""));

$cert_dir = '证书路径'; //绝对路径

$sslKeyPath = $cert_dir."apiclient_key.pem";

//拼接参数

$message = $http_method . "\n" .

$canonical_url . "\n" .

$timestamp . "\n" .

$nonce . "\n" .

$body . "\n";

$private_key = self::getPrivateKey($sslKeyPath);

openssl_sign($message, $raw_sign, $private_key, 'sha256WithRSAEncryption');

$sign = base64_encode($raw_sign);

$token = sprintf('WECHATPAY2-SHA256-RSA2048 mchid="%s",nonce_str="%s",timestamp="%s",serial_no="%s",signature="%s"', "商户号", $nonce, $timestamp, "证书序列号", $sign);

return $token;

}

public static function createNonceStr($length = 16) { //生成随机16个字符的字符串

$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

$str = "";

for ($i = 0; $i < $length; $i++) {

$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);

}

return $str;

}

public static function getPrivateKey($filepath = '')

{

if (empty($filepath)) {

//私钥位置

$cert_dir = '证书位置';

$filepath = $cert_dir."apiclient_key.pem";

}

return openssl_get_privatekey(file_get_contents($filepath));

}

到此微信商户转账到用户零钱结束   (注意微信商户号里一定要有钱)  //不然会报错

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: