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) == 'resource') { return; } if (gettype($v) == 'object' || gettype($v) == 'array') { $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();
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!