Maison > développement back-end > tutoriel php > Développement PHP Exemple de code de paiement d'entreprise de paiement WeChat

Développement PHP Exemple de code de paiement d'entreprise de paiement WeChat

小云云
Libérer: 2023-03-20 22:54:01
original
2992 Les gens l'ont consulté

Scénarios d'application du paiement d'entreprise : les comptes publics paient les utilisateurs qui les ont suivis, comme le traitement des remboursements, les règlements financiers, etc. Cet article partage principalement avec vous l'exemple de code de développement du paiement d'entreprise de paiement WeChat en PHP, dans l'espoir de vous aider tout le monde.

Instructions

1. Le certificat doit être le certificat de votre propre commerçant (remarque : le chemin du certificat doit être un chemin absolu. Si vous utilisez un chemin relatif, l'erreur suivante sera signalé

impossible d'utiliser le certificat client (aucune clé trouvée ou mauvaise phrase de passe ?)

2. Remplissez simplement votre propre application, votre secret et votre clé

Parlons d'abord de l'implémentation. Idée :

1. Obtenez d'abord l'openid, voir ci-dessous pour la méthode spécifique

2. , etc., voir ci-dessous pour la méthode spécifique

Référence des paramètres : Documentation de l'API de paiement d'entreprise
/** 
* API 参数 
* @var array 
* ‘mch_appid’ # 公众号APPID 
* ‘mchid’ # 商户号 
* ‘device_info’ # 设备号 
* ‘nonce_str’ # 随机字符串 
* ‘partner_trade_no’ # 商户订单号 
* ‘openid’ # 收款用户openid 
* ‘check_name’ # 校验用户姓名选项 针对实名认证的用户 
* ‘re_user_name’ # 收款用户姓名 
* ‘amount’ # 付款金额 
* ‘desc’ # 企业付款描述信息 
* ‘spbill_create_ip’ # Ip地址 
* ‘sign’ # 签名 
*/
Copier après la connexion
1 Obtenir le CODE (page index.php)

2. . Traitement du code de la page de rappel d'informations (getInfo.php )

<?php //信息回调文件所在的服务器位置$str="http://www.xxx.com/company_pay/getInfo.php";$str_url=urlencode($str);$appid = "xxxx3e5273505e";$url = &#39;https://open.weixin.qq.com/connect/oauth2/authorize?appid=&#39;.$appid.&#39;&redirect_uri=&#39;.$str_url.&#39;&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect&#39;;

header("Location:".$url);?>
Copier après la connexion
3. Générer le fichier de fonction de signature (api.php)

<?php$appid = "wxxxxx3505e";//你的微信公众平台的appid$secret = "fxxxxx71xxx4cda2a671";//你微信公众平台的secret$code = $_GET["code"];$get_token_url = &#39;https://api.weixin.qq.com/sns/oauth2/access_token?appid=&#39;.$appid.&#39;&secret=&#39;.$secret.&#39;&code=&#39;.$code.&#39;&grant_type=authorization_code&#39;;$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$get_token_url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);$res = curl_exec($ch);
curl_close($ch);$json_obj = json_decode($res,true);//根据openid和access_token查询用户信息$access_token = $json_obj[&#39;access_token&#39;];$openid = $json_obj[&#39;openid&#39;];$get_user_info_url = &#39;https://api.weixin.qq.com/sns/userinfo?access_token=&#39;.$access_token.&#39;&openid=&#39;.$openid.&#39;&lang=zh_CN&#39;;$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$get_user_info_url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);$res = curl_exec($ch);
curl_close($ch);//解析json$user_obj = json_decode($res,true);//var_dump($user_obj);echo "<br/>"."-----".$openid."*****";$mch_appid=$appid;$mchid=&#39;10000401&#39;;//商户号$nonce_str=&#39;vhmake&#39;.rand(100000, 999999);//随机数$partner_trade_no=&#39;VH&#39;.time().rand(10000, 99999);//商户订单号$openid=$openid;//用户唯一标识$check_name=&#39;NO_CHECK&#39;;//校验用户姓名选项,NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)$re_user_name=&#39;[北京微函工坊科技有限公司](http://www.vhmake.com)&#39;;//用户姓名$amount=100;//金额(以分为单位,必须大于100)$desc=&#39;[北京微函工坊科技有限公司](http://www.vhmake.com)&#39;;//描述$spbill_create_ip=$_SERVER["REMOTE_ADDR"];//请求ip//封装成数据$dataArr=array();$dataArr[&#39;amount&#39;]=$amount;$dataArr[&#39;check_name&#39;]=$check_name;$dataArr[&#39;desc&#39;]=$desc;$dataArr[&#39;mch_appid&#39;]=$mch_appid;$dataArr[&#39;mchid&#39;]=$mchid;$dataArr[&#39;nonce_str&#39;]=$nonce_str;$dataArr[&#39;openid&#39;]=$openid;$dataArr[&#39;partner_trade_no&#39;]=$partner_trade_no;$dataArr[&#39;re_user_name&#39;]=$re_user_name;$dataArr[&#39;spbill_create_ip&#39;]=$spbill_create_ip;require &#39;api.php&#39;;$sign=getSign($dataArr);echo "-----<br/>签名:".$sign."<br/>*****";//die;$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>";//var_dump($data);$ch = curl_init ();$MENU_URL="https://api.mch.weixin.qq.com/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="/xxxx/xxx/xxxxxx/apiclient_cert.pem";//注意:填写的路径必须为绝对路径,不可以填写相对路径$zs2="/xxxx/xxx/xxxxx/apiclient_key.pem";
curl_setopt($ch,CURLOPT_SSLCERT,$zs1);
curl_setopt($ch,CURLOPT_SSLKEY,$zs2);// curl_setopt($ch, CURLOPT_USERAGENT, &#39;Mozilla/5.0 (compatible; MSIE 5.01;// Windows NT 5.0)&#39;);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 );$infos=simplexml_load_string($info);if (curl_errno ( $ch )) {    echo &#39;Errno:::&#39; . curl_error ( $ch );
}

curl_close ( $ch );echo "-----<br/>请求返回值:";echo $infos->return_code;echo "<br/>*****";?>
Copier après la connexion
Renvoyer les paramètres de retour au format XML après succès. (veuillez vous référer à la documentation de développement pour plus de détails)

<?php/**
 *  作用:格式化参数,签名过程需要使用
 */function formatBizQueryParaMap($paraMap, $urlencode){
    $buff = "";
    ksort($paraMap);    foreach ($paraMap as $k => $v)
    {        if($urlencode)
        {            $v = urlencode($v);
        }        $buff .= $k . "=" . $v . "&";
    }    if (strlen($buff) > 0)
    {        $reqPar = substr($buff, 0, strlen($buff)-1);
    }    return $reqPar;
}/**
 *  作用:生成签名
 */function getSign($Obj){
    foreach ($Obj as $k => $v)
    {        $Parameters[$k] = $v;
    }    //签名步骤一:按字典序排序参数
    ksort($Parameters);    $String = formatBizQueryParaMap($Parameters, false);    //echo &#39;【string1】&#39;.$String.&#39;</br>&#39;;
    //签名步骤二:在string后加入KEY
    $String = $String."&key=vhmake666vhmake666vhmake666vhmak";    //echo "【string2】".$String."</br>";
    //签名步骤三:MD5加密
    $String = md5($String);    //echo "【string3】 ".$String."</br>";
    //签名步骤四:所有字符转为大写
    $result_ = strtoupper($String);    //echo "【result】 ".$result_."</br>";
    return $result_;
}
Copier après la connexion
Recommandations associées :

<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[]]></return_msg><mch_appid><![CDATA[wxec38b8ff840bd989]]></mch_appid><mchid><![CDATA[10013274]]></mchid><device_info><![CDATA[]]></device_info><nonce_str><![CDATA[lxuDzMnRjpcXzxLx0q]]></nonce_str><result_code><![CDATA[SUCCESS]]></result_code><partner_trade_no><![CDATA[10013574201505191526582441]]></partner_trade_no><payment_no><![CDATA[1000018301201505190181489473]]></payment_no><payment_time><![CDATA[2015-05-19 15:26:59]]></payment_time></xml>
Copier après la connexion
Explication détaillée de l'interface d'arrière-plan php du paiement App WeChat

Recherche et partage sur l'interface de paiement WeChat

Exemple d'analyse de la mise en œuvre du paiement APP WeChat via PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers numéros
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal