Maison > développement back-end > tutoriel php > Apprenez à utiliser le développement PHP pour implémenter la fonction de remboursement WeChat

Apprenez à utiliser le développement PHP pour implémenter la fonction de remboursement WeChat

jacklove
Libérer: 2023-03-27 14:32:02
original
1433 Les gens l'ont consulté

Cet article explique les connaissances pertinentes sur l'utilisation de PHP pour développer la fonction de remboursement WeChat.

L'exemple de cet article décrit le développement de PHP pour implémenter la fonction de remboursement WeChat. Je le partage avec vous pour votre référence. Les détails sont les suivants :

J'ai récemment ajusté l'interface de remboursement de WeChat et j'ai trouvé de nombreux pièges. J'aimerais le partager avec vous

①. Si pendant le test, la page Web demande curl 58 Cela signifie qu'il y a un problème avec le chemin du certificat (veuillez remplir ici le chemin physique, c'est-à-dire le chemin absolu)

② La page Web demande curl 52, ce qui signifie que vous avez introduit moins de certificats. Il n'y a que deux certificats apiclient_cert.pem et apiclient_key.pem. Vous devez également introduire un certificat rootca.pem. Ce certificat nécessite que vous vous connectiez à

votre commerçant. plate-forme à télécharger

③ Si la page Web demande « HTTP/1.1 200 OK Serveur : nginx Date : mar 20 juin 2017 08:08:01 GMT Type de contenu : texte/plain Longueur du contenu : 852 Connexion : keep-alive Keep-Alive: timeout=8

Cela signifie qu'il n'y a pas de problème avec votre code Oui, il se peut que les paramètres soient erronés. Mon erreur précédente a été d'écrire out_refund_no et out_trade_no de la même manière. est également écrit de la même manière sur le site officiel de WeChat, mais il y a un problème. J'ai modifié out_refund_no et j'ai trouvé que cela fonctionne

Remarque : L'unité du montant est le centime

Ce qui suit. est l'interface que j'ai écrite

function Home_index() {
 
date_default_timezone_set("Asia/Shanghai");
 
$date = date("YmdHis");
 
$appid = "";
 
$mch_id = "";
 
$out_trade_no = "14487658021497944120";
 
$op_user_id = "";
 
$out_refund_no = $date;
 
$total_fee = "500";
 
$refund_fee = "500";
 
// $transaction_id = "4009542001201706206596667604";
 
$key = "";
 
$nonce_str = nonceStr();
 
$ref = strtoupper(md5("appid=$appid&mch_id=$mch_id&nonce_str=$nonce_str&op_user_id=$op_user_id"
 
. "&out_refund_no=$out_refund_no&out_trade_no=$out_trade_no&refund_fee=$refund_fee&total_fee=$total_fee"
 
. "&key=$key")); //sign加密MD5
 
$refund = array(
 
'appid' =>$appid, //应用ID,固定
 
'mch_id' => $mch_id, //商户号,固定
 
'nonce_str' => $nonce_str, //随机字符串
 
'op_user_id' => $op_user_id, //操作员
 
'out_refund_no' => $out_refund_no, //商户内部唯一退款单号
 
'out_trade_no' => $out_trade_no, //商户订单号,pay_sn码 1.1二选一,微信生成的订单号,在支付通知中有返回
 
// 'transaction_id'=>'1',//微信订单号 1.2二选一,商户侧传给微信的订单号
 
'refund_fee' => $refund_fee, //退款金额
 
'total_fee' => $total_fee, //总金额
 
'sign' => $ref//签名
 
);
 
$url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
 
; //微信退款地址,post请求
 
$xml = arrayToXml($refund);
 
$ch = curl_init();
 
curl_setopt($ch, CURLOPT_URL, $url);
 
curl_setopt($ch, CURLOPT_HEADER, 1);
 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); //证书检查
 
if ($useCert == true) {
 
// 设置证书
 
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'pem');
 
curl_setopt($ch, CURLOPT_SSLCERT, dirname(__FILE__) . '/WxPay/cert/apiclient_cert.pem');
 
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'pem');
 
curl_setopt($ch, CURLOPT_SSLKEY, dirname(__FILE__) . '/WxPay/cert/apiclient_key.pem');
 
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'pem');
 
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/WxPay/cert/rootca.pem');
 
}
 
curl_setopt($ch, CURLOPT_POST, 1);
 
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
 
$xml = curl_exec($ch);
 
// 返回结果0的时候能只能表明程序是正常返回不一定说明退款成功而已
 
if ($xml) {
 
curl_close($ch);
 
// 把xml转化成数组
 
libxml_disable_entity_loader(true);
 
$xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
 
// var_dump($xmlstring);
 
$result['errNum'] = 0;
 
$result['info'] = object_to_array($xmlstring);
 
// var_dump($result);
 
return $result;
 
} else {
 
$error = curl_errno($ch);
 
curl_close($ch);
 
// 错误的时候返回错误码。
 
$result['errNum'] = $error;
 
return $result;
 
}
 
}
 
function arrayToXml($arr) {
 
$xml = "";
 
foreach ($arr as $key => $val) {
 
if (is_array($val)) {
 
$xml .= "<" . $key . ">" . arrayToXml($val) . "{C}<!--" ? . $key-->";
 
} else {
 
$xml .= "<" . $key . ">" . $val . "{C}<!--" ? . $key-->";
 
}
 
}
 
$xml .= "";
 
return $xml;
 
}
 
function object_to_array($obj) {
 
$obj = (array) $obj;
 
foreach ($obj as $k => $v) {
 
if (gettype($v) == &#39;resource&#39;) {
 
return;
 
}
 
if (gettype($v) == &#39;object&#39; || gettype($v) == &#39;array&#39;) {
 
$obj[$k] = (array) object_to_array($v);
 
}
 
}
 
return $obj;
 
}
 
function nonceStr() {
 
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
 
$str = "";
 
$length = 32;
 
for ($i = 0; $i < $length; $i++) {
 
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
 
}
 
// 随机字符串
 
return $str;
 
}
 
Home_index();
Copier après la connexion

Cet article explique les connaissances pertinentes sur l'utilisation de PHP pour développer la fonction de remboursement WeChat. Pour plus de contenu connexe, veuillez faire attention au site Web chinois php

Connexe. recommandations :

Implémentation PHP de l'impression des arbres binaires dans l'ordre en zigzag

Implémentation PHP de la recherche de la boucle dans la liste chaînée Noeud d'entrée

Comment implémenter la sortie en temps réel php nginx

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal