微信退款开发过程

[php]  view plain  copy
 print ?
  1. 微信退款需要配置的数据有:  
  2. 公众号的  $appid  
  3. 商户号  $mch_id   
  4. 随机字符串 $nonce_str  
  5. 商户订单号  $out_trade_no  
  6. 商户退单号  $out_refund_no  
  7. 退款总金额  $refund_fee     
  8. 订单总金额  $total_fee      
  9. 操作员帐号  $op_user_id     
  10. 商户平台中对应的key值 $key  
  11. ---------------------------------  
  12. 注意事项:  
  13. 1.订单总金额和退款总金额是 处理单位是分 而且只能是整数  
  14. 2.操作员账号 可以 用商户号就可以  
  15. 3.商户退单号:自己随机一个只要不重复就可以,为了方便只要放上订单号就行本身也是不重复的  
  16. ----------------------------------  
  17. 使用:  
  18.     根据上面的信息进行签名生成:  
  19.     1.生成一个随机字符串  
  20.     // 签名设置中随机字符串  
  21.         function nonceStr(){  
  22.             $chars = "abcdefghijklmnopqrstuvwxyz0123456789";    
  23.             $str ="";  
  24.             $length = 32;  
  25.             for($i = 0; $i < $length$i++){    
  26.                 $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);    
  27.             }   
  28.             // 随机字符串  
  29.             return $str;  
  30.         }  
  31.     2.签名生成  
  32.         $arrayName = array('op_user_id'=>$op_user_id,'refund_fee'=>$refund_fee,  
  33.         'total_fee'=>$total_fee,'appid'=>$appid,'mch_id'=>$mch_id,'out_trade_no'=>$out_trade_no,  
  34.         'nonce_str'=>$nonce_str,'out_refund_no'=>$out_refund_no);  
  35.         ksort($arrayName);  
  36.         $sign = '';  
  37.         foreach ($arrayName as $key => $value) {  
  38.             $sign.='&'.$key.'='.$value;  
  39.         }  
  40.         // 进行拼凑  
  41.         // 去掉开头的&并且进行MD5加密处理  
  42.         $stringSignTemp = ltrim($sign,'&');  
  43.         $key = "商户号申请的时候你自己的输入的key值";  
  44.         $stringSignTemp =  $stringSignTemp.'&key='.$key;  
  45.         $sign = md5($stringSignTemp);  
  46.         $sign = strtoupper($sign);// 最终获得签名的值  
  47.     3.把上面的所有数据进行组成xml数据  
  48.         $xmldata = "<xml><appid>".$appid."</appid><mch_id>".$mch_id."</mch_id><nonce_str>"  
  49.              .$nonce_str."</nonce_str><op_user_id>".$op_user_id."</op_user_id><out_refund_no>".  
  50.              $out_refund_no."</out_refund_no><out_trade_no>"$out_trade_no."</out_trade_no><refund_fee>".  
  51.              $refund_fee ."</refund_fee><total_fee>"$total_fee."</total_fee><sign>".$sign."</sign></xml>";  
  52.     4.微信退款接口准备:  
  53.         $url = 'https://api.mch.weixin.qq.com/secapi/pay/refund';// 退款微信接口准备  
  54.     5.进行curl 有证书post数据  
  55.         function postXmlCurl($xmldata$url$useCert = false, $second = 6)  
  56.         {         
  57.             // 证书验证与否  
  58.   
  59.             $ch = curl_init();  
  60.             // 设置超时  
  61.             curl_setopt($ch, CURLOPT_TIMEOUT, $second);  
  62.             curl_setopt($ch,CURLOPT_URL, $url);  
  63.             curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);  
  64.             curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验  
  65.             // 设置header  
  66.             curl_setopt($ch, CURLOPT_HEADER, FALSE);  
  67.             // 要求结果为字符串且输出到屏幕上  
  68.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);  
  69.             // 退款严格使用证书,必须是公众号所对应的商户平台下的证书才可以,安全不的外泄  
  70.             if($useCert == true){  
  71.                 // 设置证书  
  72.                 // 使用证书:cert 与 key 分别属于两个.pem文件  
  73.                 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');  
  74.                 curl_setopt($ch,CURLOPT_SSLCERT,ROOT_PATH."wxpay/cert/apiclient_cert.pem");  
  75.                 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');  
  76.                 curl_setopt($ch,CURLOPT_SSLKEY,ROOT_PATH."wxpay/cert/apiclient_key.pem");  
  77.             }  
  78.             // post提交方式  
  79.             curl_setopt($ch, CURLOPT_POST, TRUE);  
  80.             curl_setopt($ch, CURLOPT_POSTFIELDS, $xmldata);  
  81.             // 运行curl  
  82.             $xml = curl_exec($ch);  
  83.             // 返回结果0的时候能只能表明程序是正常返回不一定说明退款成功而已  
  84.             if($xml){  
  85.                 curl_close($ch);  
  86.                 // 把xml转化成数组  
  87.                 libxml_disable_entity_loader(true);   
  88.                 $xmlstring = simplexml_load_string($xml'SimpleXMLElement', LIBXML_NOCDATA);   
  89.                 $result['errNum'] = 0;  
  90.                 $result['info'] = objectToArray($xmlstring);  
  91.                 return $result;  
  92.             }else{   
  93.                 $error = curl_errno($ch);  
  94.                 curl_close($ch);  
  95.                 // 错误的时候返回错误码。  
  96.                 $result['errNum'] = $error;  
  97.                 return $result;  
  98.             }  
  99.         }  
  100.     注意:开发过程中,遇到的问题:证书:需要在上商户平台中获得然后根据自己的实际路径进行填写。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值