PHP微信商戶支付企業付款到零錢功能

一 開通條件,就是首先要在微信平臺設置好。php

如下微信文檔裏有的,我這裏大概掠幾項比較重要的。json

付款資金api

企業付款到零錢資金使用商戶號餘額資金。安全

 

根據商戶號的帳戶開通狀況,實際出款帳戶有作區別:微信

◆ 默認狀況下,企業付款到零錢使用商戶號基本戶(或餘額帳戶)餘額。如商戶號已開通運營帳戶,則企業付款到零錢使用運營帳戶內的資金。app

◆ 基本戶(或上述其餘出款帳戶)的資金來源,多是交易結算款項(僅基本戶),或給帳戶充值的資金。當出款帳戶餘額不足時,付款將因餘額不足而付款失敗。curl

付款規則post

付款方式測試

◆ 支持API接口或網頁操做,付款至目標用戶。url

收款用戶身份指定

◆ 經過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微信商戶支付企業付款到零錢功能

相關文章
相關標籤/搜索