[php]
view plain
copy
print
?
微信退款需要配置的数据有: 公众号的 $appid 商户号 $mch_id 随机字符串 $nonce_str 商户订单号 $out_trade_no 商户退单号 $out_refund_no 退款总金额 $refund_fee 订单总金额 $total_fee 操作员帐号 $op_user_id 商户平台中对应的key值 $key --------------------------------- 注意事项: 1.订单总金额和退款总金额是 处理单位是分 而且只能是整数 2.操作员账号 可以 用商户号就可以 3.商户退单号:自己随机一个只要不重复就可以,为了方便只要放上订单号就行本身也是不重复的 ---------------------------------- 使用: 根据上面的信息进行签名生成: 1.生成一个随机字符串 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; } 2.签名生成 $arrayName = array('op_user_id'=>$op_user_id,'refund_fee'=>$refund_fee, 'total_fee'=>$total_fee,'appid'=>$appid,'mch_id'=>$mch_id,'out_trade_no'=>$out_trade_no, 'nonce_str'=>$nonce_str,'out_refund_no'=>$out_refund_no); ksort($arrayName); $sign = ''; foreach ($arrayName as $key => $value) { $sign.='&'.$key.'='.$value; } $stringSignTemp = ltrim($sign,'&'); $key = "商户号申请的时候你自己的输入的key值"; $stringSignTemp = $stringSignTemp.'&key='.$key; $sign = md5($stringSignTemp); $sign = strtoupper($sign); 3.把上面的所有数据进行组成xml数据 $xmldata = "<xml><appid>".$appid."</appid><mch_id>".$mch_id."</mch_id><nonce_str>" .$nonce_str."</nonce_str><op_user_id>".$op_user_id."</op_user_id><out_refund_no>". $out_refund_no."</out_refund_no><out_trade_no>". $out_trade_no."</out_trade_no><refund_fee>". $refund_fee ."</refund_fee><total_fee>". $total_fee."</total_fee><sign>".$sign."</sign></xml>"; 4.微信退款接口准备: $url = 'https://api.mch.weixin.qq.com/secapi/pay/refund';// 退款微信接口准备 5.进行curl 有证书post数据 function postXmlCurl($xmldata, $url, $useCert = false, $second = 6) { $ch = curl_init(); curl_setopt($ch, CURLOPT_TIMEOUT, $second); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); if($useCert == true){ curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT,ROOT_PATH."wxpay/cert/apiclient_cert.pem"); curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY,ROOT_PATH."wxpay/cert/apiclient_key.pem"); } curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $xmldata); $xml = curl_exec($ch); if($xml){ curl_close($ch); libxml_disable_entity_loader(true); $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); $result['errNum'] = 0; $result['info'] = objectToArray($xmlstring); return $result; }else{ $error = curl_errno($ch); curl_close($ch); $result['errNum'] = $error; return $result; } } 注意:开发过程中,遇到的问题:证书:需要在上商户平台中获得然后根据自己的实际路径进行填写。
转载请注明原文地址: https://www.6miu.com/read-600246.html