微信提现PHP实现 在Unity游戏中使用PHP进行微信提现

注意:微信提现之前需要接入微信登录,因为需要用到微信用户的openID,还需要在微信开放平台申请自己的app获得到Appid

 

一 提现前的准备工作

确认自己的企业资质查看是否符合开通微信企业付款到微信个人用户,查看地址中的场景简绍:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1

 

 

Api明确要求我们必须在微信商户平台开通企业付款到个人

二 准备开发相关配置

  1. 准备请求时要用的证书

(1)证书的准备:java开发需要用到:apiclient_cert.p12证书,PHP的话需要用到apiclient_cert.pem和(apiclient_key.pem) 在微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>证书中下载的 。

(2)如果是刚开通的是没有直接下载证书的按钮,下载的这个位置为申请证书需要自己手动申请证书申请的时候会让下载一个证书生成工具如下图

然后通过网页上的证书请求串和软件上的证书串就可以申请到证书文件。

(3)下载到的证书为一个压缩包,其中包含了java需要的证书,php需要的证书,还有都需要用的的密钥。

(4)什么时候会用到证书?与支付不一样,企业支付功能在发送post请求的时候,需要加载自己的一个证书之后,带着证书去请求提现才可以。

(5)证书简绍

2设置密钥(必须)

在账户中心。Api安全点击设置密钥进行设置,设置的密钥为32位包含数字和字母,密钥是自己填写的和密码一样用什么密码自己决定。

3设置请求用到的我们自己服务器的IP地址(必须)

这个ip地址一定是要你发送请求的公网ip地址,无论客户端或者服务端。
我的理解是如果前端直接发送请求到微信后台接口,就要用客户端的公网ip,
如果是服务端直接发送请求到微信后台接口,就需要用服务端的公网ip。
而且这个ip地址必需先添加到商户白名单。
添加ip白名单的流程如下:
1.先登陆商户平台
https://pay.weixin.qq.com/index.php
2.到产品中心=》我的产品

3.找到企业付款到零钱点进去

4.进入产品设置

5.API接口发起添加公网ip

 

如果没有添加合适的ip白名单,申请提现就会返回如下结果


注:微信企业付款到银行卡同样要添加ip白名单,只是请求参数不需要写明ip地址。

三 处理PHP逻辑

(1)注意事项

(2)请求提现的地址

(3)必填参数的简绍

(4)PHP代码

Php的下半部分根据自己的开发需求修改即可,具体请求之后的错误码相关的参考该链接:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2  到此所有的工作就做完了剩下的就是调试了。

下边附上PHP源码:

';foreach($data as $k=>$v) {$str.='<'.$k.'>'.$v.'';}$str.='';return $str;
}
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;
} function curl($param="",$url) {$isdir = $_SERVER['DOCUMENT_ROOT']."/config/";//证书位置;绝对路径$postUrl = $url;$curlPost = $param;$ch = curl_init();                                      //初始化curlcurl_setopt($ch, CURLOPT_URL,$postUrl);        	         //抓取指定网页curl_setopt($ch, CURLOPT_HEADER, 0);                    //设置headercurl_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_SSLCERTTYPE, 'PEM');//证书类型curl_setopt($ch, CURLOPT_SSLCERT, $isdir . 'apiclient_cert.pem');//证书位置curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');//CURLOPT_SSLKEY中规定的私钥的加密类型curl_setopt($ch, CURLOPT_SSLKEY, $isdir . 'apiclient_key.pem');//证书位置curl_setopt($ch, CURLOPT_CAINFO, 'PEM');$data = curl_exec($ch);                                 //运行curlcurl_close($ch);return $data;
}/*
$amount 发送的金额(分)目前发送金额不能少于1元
$re_openid, 发送人的 openid
$desc  //  企业付款描述信息 (必填)
$check_name    收款用户姓名 (选填)
*/
function sendMoney($amount,$re_openid,$desc,$check_name){$total_amount = (100) * $amount;$data=array('mch_appid'=>APPID,//商户账号appid'mchid'=> MCHID,//商户号'nonce_str'=>createNoncestr(),//随机字符串'partner_trade_no'=> date('YmdHis').rand(1000, 9999),//商户订单号'openid'=> $re_openid,//用户openid'check_name'=>'NO_CHECK',//校验用户姓名选项,'re_user_name'=> $check_name,//收款用户姓名'amount'=>$total_amount,//金额'desc'=> $desc,//企业付款描述信息'spbill_create_ip'=> IP,//Ip地址);$secrect_key=SECRECT_KEY;///这个就是个API密码。MD5 32位。$data=array_filter($data);ksort($data);$str='';foreach($data as $k=>$v) {$str.=$k.'='.$v.'&';}$str.='key='.$secrect_key;$data['sign']=md5($str);$xml=arraytoxml($data);$url='https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; //调用接口$res=curl($xml,$url);$return=xmltoarray($res);error_log("sdk_log ===== ".toString($return),0);if(!array_key_exists("return_code", $return) || $return["return_code"] === "FAIL") {//通信失败return FALSE;}//     print_r($return);//返回来的结果// [return_code] => SUCCESS [return_msg] => Array ( ) [mch_appid] => wxd44b890e61f72c63 [mchid] => 1493475512 [nonce_str] => 616615516 [result_code] => SUCCESS [partner_trade_no] => 20186505080216815 // [payment_no] => 1000018361251805057502564679 [payment_time] => 2018-05-15 15:29:50// 	$responseObj = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
// 	echo $res= $responseObj->return_code;  //SUCCESS  如果返回来SUCCESS,则发生成功,处理自己的逻辑return $return["result_code"] === "SUCCESS";
}/** 优雅输出  */
function toString($array) {$res = "";foreach ($array as $key => $value) {$res = $res .$key." = ".$value." \n";}return $res;
}return 'WeChatWithdraw.php';
?>

(5)到账截图

四 其他

微信支付接口签名校验工具:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=20_1

 

企业付款到个人账户官方文档:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2         

 

微信登录官方文档:

https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Authorized_API_call_UnionID.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部