一 開通條件,就是首先要在微信平台設置好。
以下微信文檔里有的,我這里大概掠幾項比較重要的。
付款資金
企業付款到零錢資金使用商戶號余額資金。
根據商戶號的賬戶開通情況,實際出款賬戶有做區別:
◆ 默認情況下,企業付款到零錢使用商戶號基本戶(或余額賬戶)余額。如商戶號已開通運營賬戶,則企業付款到零錢使用運營賬戶內的資金。
◆ 基本戶(或上述其他出款賬戶)的資金來源,可能是交易結算款項(僅基本戶),或給賬戶充值的資金。當出款賬戶余額不足時,付款將因余額不足而付款失敗。
付款規則
付款方式
◆ 支持API接口或網頁操作,付款至目標用戶。
收款用戶身份指定
◆ 通過APPID+OPENID指定收款用戶。
◆ APPID需要為申請商戶號時的APPID,或者與商戶號有綁定關系。
◆ OPENID的獲取方式,可參照:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839
付款額度
◆ 不支持給非實名用戶打款
◆ 給同一個實名用戶付款,單筆單日限額2W/2W
◆ 一個商戶同一日付款總額限額100W
注意:以上規則中的限額2w、100w由於計算規則與風控策略的關系,不是完全精確值,金額僅做參考,請不要依賴此金額做系統處理,應以接口實際返回和查詢結果為准,請知曉。
收款用戶身份校驗
◆ 針對付款的目標用戶,提供可校驗真實姓名的功能
查詢付款情況
◆ 已付款的記錄,企業可通過企業付款查詢查看相應數據,或者查詢商戶號資金流水。
付款頻次
◆ 默認每天最多可向同一個用戶付款10次,可以在商戶平台--API安全進行設置
其他注意事項
◆ 付款金額必須小於或等於商戶當前可用余額的金額;
二 接口地址
接口鏈接:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
請求參數:
具體參看官方企業付款開發文檔說明
PHP代碼示例調用,這里是寫在一個文件里,看每個方法就知道是干嘛用的咯。
<?php //企業付款到微信零錢,PHP接口調用方法 define("APPID", "wx875439864"); //商戶賬號appid define("MCHID", "190023450990"); // 商戶號 define("SECRECT_KEY", "145535866885"); //支付密鑰簽名 define("IP", "120.178.12.52"); //IP function createNoncestr($length =32) { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str =""; for ( $i = 0; $i < $length; $i++ ) { $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } function unicode() { $str = uniqid(mt_rand(),1); $str=sha1($str); return md5($str); } function arraytoxml($data){ $str='<xml>'; foreach($data as $k=>$v) { $str.='<'.$k.'>'.$v.'</'.$k.'>'; } $str.='</xml>'; 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) { $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,ROOT_PATH .'/wxpay/cacert/apiclient_cert.pem'); //這個是證書的位置絕對路徑 curl_setopt($ch,CURLOPT_SSLKEY,ROOT_PATH .'/wxpay/cacert/apiclient_key.pem'); //這個也是證書的位置絕對路徑 $data = curl_exec($ch); //運行curl curl_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); 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 $res; } ?>
三 調用方法 :
直接在你寫的方法里調用此方法就好了
sendMoney(1,'ewrwexe32423423423423423','xxxx測試');
返回的結果,成功的話就直接print出來,失敗的話也要拋出異常。如果你還是不懂,請查看之前分享過的這篇文章。
微信企業付款到個人零錢功能,很簡單的就實現咯!
效果圖如下
轉自“php自學中心 - PHP微信商戶支付企業付款到零錢功能”