600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 微信支付商户平台 企业付款 企业向个人付款接口总结

微信支付商户平台 企业付款 企业向个人付款接口总结

时间:2021-03-09 04:33:38

相关推荐

微信支付商户平台 企业付款 企业向个人付款接口总结

这几天做项目,有个需求,是微信用户需要把公众号中赚的钱提现,于是查资料找到了微信商户平台中的高级业务:企业付款。

官方文档:https://pay./wiki/doc/api/mch_pay.php?chapter=14_1

为了以后方便看,我把自己测试的代码贴一下,大家如果有需要,可以参考一下,实际项目中 可根据个人需求自己去改,

主要包含以下几个步骤(充值、网页授权获取openid、获取企业付款需要的信息、发出企业付款请求)。

1、充值

在微信商户平台中:资金管理->充值(由于企业付款将使用商户的可用余额进行支付,需确保可用余额充足。查看可用余额、充值、提现请登录商户平台“资金管理”进行操作。https://pay./ 注意:商户的可用余额与商户微信支付收款资金并非同一账户,需要单独充值。)

2、网页授权

通过网页授权获取用户的openid(企业向微信用户个人付款目前支持向指定微信用户的openid付款。),具体获取方法可查官方api或/u010533511/article/details/48085585 。

3、获取企业付款需要的信息

$mch_appid=$appid;//公众账号appid

$mchid='10000005';//商户号

$nonce_str='qyzf'.rand(100000, 999999);//随机数

$partner_trade_no='xx'.time().rand(10000, 99999);//商户订单号

$openid=$openids;//用户唯一标识,上一步授权中获取

$check_name='NO_CHECK';//校验用户姓名选项,NO_CHECK:不校验真实姓名, FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账),OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)

$re_user_name='测试';//用户姓名

$amount=100;//企业金额,这里是以分为单位(必须大于100分)

$desc='测试数据呀!!!';//描述

$spbill_create_ip='192.168.0.1';//请求ip

$dataArr=array();

$dataArr['amount']=$amount;

$dataArr['check_name']=$check_name;

$dataArr['desc']=$desc;

$dataArr['mch_appid']=$mch_appid;

$dataArr['mchid']=$mchid;

$dataArr['nonce_str']=$nonce_str;

$dataArr['openid']=$openid;

$dataArr['partner_trade_no']=$partner_trade_no;

$dataArr['re_user_name']=$re_user_name;

$dataArr['spbill_create_ip']=$spbill_create_ip;

//生成签名

$sign=getSign($dataArr);//getSign($dataArr);见结尾

echo "-----<br/>签名:".$sign."<br/>*****";//die;

//拼写正确的xml参数

$data="<xml>

<mch_appid>".$mch_appid."</mch_appid>

<mchid>".$mchid."</mchid>

<nonce_str>".$nonce_str."</nonce_str>

<partner_trade_no>".$partner_trade_no."</partner_trade_no>

<openid>".$openid."</openid>

<check_name>".$check_name."</check_name>

<re_user_name>".$re_user_name."</re_user_name>

<amount>".$amount."</amount>

<desc>".$desc."</desc>

<spbill_create_ip>".$spbill_create_ip."</spbill_create_ip>

<sign>".$sign."</sign>

</xml>";

4、发出企业付款请求

$ch = curl_init ();

$MENU_URL="https://api.mch./mmpaymkttransfers/promotion/transfers";

curl_setopt ( $ch, CURLOPT_URL, $MENU_URL );

curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" );

curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );

curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );

//两个证书(必填,请求需要双向证书。)

$zs1="/apiclient_cert.pem";

$zs2="/apiclient_key.pem";

curl_setopt($ch,CURLOPT_SSLCERT,$zs1);

curl_setopt($ch,CURLOPT_SSLKEY,$zs2);

curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );

curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );

curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );

curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );

$info = curl_exec ( $ch );

if (curl_errno ( $ch )) {

echo 'Errno' . curl_error ( $ch );

}

curl_close ( $ch );

echo "-----<br/>请求返回值:";

var_dump($info);

echo "<br/>*****";die;

更具返回值,做具体处理。

------------------------getSign()方法如下----------------------

/**

* 作用:生成签名

*/

function getSign($Obj)

{

var_dump($Obj);//die;

foreach ($Obj as $k => $v)

{

$Parameters[$k] = $v;

}

//签名步骤一:按字典序排序参数

ksort($Parameters);

$String = formatBizQueryParaMap($Parameters, false);//方法如下

//echo '【string1】'.$String.'</br>';

//签名步骤二:在string后加入KEY

$String = $String."&key=6cd1c9cab639cb399cb371cbd893e15e";

//echo "【string2】".$String."</br>";

//签名步骤三:MD5加密

$String = md5($String);

//echo "【string3】 ".$String."</br>";

//签名步骤四:所有字符转为大写

$result_ = strtoupper($String);

//echo "【result】 ".$result_."</br>";

return $result_;

}

/**

* 作用:格式化参数,签名过程需要使用

*/

function formatBizQueryParaMap($paraMap, $urlencode)

{

var_dump($paraMap);//die;

$buff = "";

ksort($paraMap);

foreach ($paraMap as $k => $v)

{

if($urlencode)

{

$v = urlencode($v);

}

//$buff .= strtolower($k) . "=" . $v . "&";

$buff .= $k . "=" . $v . "&";

}

$reqPar;

if (strlen($buff) > 0)

{

$reqPar = substr($buff, 0, strlen($buff)-1);

}

var_dump($reqPar);//die;

return $reqPar;

}

示例demo地址:/detail/u010533511/9106723

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。