微信api退款及退款查询

来源:互联网 发布:交换机软件故障 编辑:程序博客网 时间:2024/05/17 03:55

相比支付宝的接口,微信的接口与实现都很简单其实,官方文档都有很详细的讲解。

官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4


步骤:

1.下载 安全证书!!【关键】

2.按官方文档组织参数,生成URL

3.CURL等同步访问URL,获取XML返回值(支付宝同步返回的是受理结果,异步才返回执行结果,坑 )

4.自己系统的回调验证,完成自己系统退款的后续操作


一.证书的配置与下载

路径下载:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->证书下载 。证书文件有四个,全部下载即可。





二.配置参数

[php] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:12px;">array(  
  2.         'appid'=>'your_appid',//应用ID,固定  
  3.         'mch_id'=>'your_mch_id',//商户号,固定  
  4.         'nonce_str'=>'123456',//随机字符串  
  5.         'op_user_id'=>'646131',//操作员  
  6.         'out_refund_no'=>'201608142308',//商户内部唯一退款单号  
  7.         'out_trade_no'=>'860524080535541654',//商户订单号,pay_sn码 1.1二选一,微信生成的订单号,在支付通知中有返回  
  8.         // 'transaction_id'=>'1',//微信订单号 1.2二选一,商户侧传给微信的订单号  
  9.         'refund_fee'=>'3',//退款金额  
  10.         'total_fee'=>'3',//总金额  
  11.         'sign'=>$ref//签名  
  12.     );</span>  


三.注意事项


1. 本接口是需要证书的,下载放上见上边

2. 微信的接口里,所有对金额的描述,都是以分为单位的

3.交易时间超过一年的订单无法提交退款;

4.微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。一笔退款失败后重新提交,要采用原来的退款单号。总退款金额不能超过用户实际支付金额。

5.在用下边demo做测试的时候,请先真实支付一次,获取相应的ID与参数,然后直接运行调试即可,仅供参考

6.注意下签名规则




demo源码

<?php/*请确保您的libcurl版本是否支持双向认证,版本高于7.20.1*/function Home_index(){   $ref= strtoupper(md5("appid=your_appid&mch_id=your_mch_id&nonce_str=123456&op_user_id=646131"      . "&out_refund_no=201608142308&out_trade_no=860524080535541654&refund_fee=3&total_fee=3"      . "&key=suiji123"));//sign加密MD5   $refund=array(      'appid'=>'your_appid',//应用ID,固定      'mch_id'=>'your_mch_id',//商户号,固定      'nonce_str'=>'123456',//随机字符串      'op_user_id'=>'646131',//操作员      'out_refund_no'=>'201608142308',//商户内部唯一退款单号      'out_trade_no'=>'860524080535541654',//商户订单号,pay_sn码 1.1二选一,微信生成的订单号,在支付通知中有返回      // 'transaction_id'=>'1',//微信订单号 1.2二选一,商户侧传给微信的订单号      'refund_fee'=>'3',//退款金额      'total_fee'=>'3',//总金额      '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);//证书检查   curl_setopt($ch,CURLOPT_SSLCERTTYPE,'pem');   curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).'/cert/apiclient_cert.pem');   curl_setopt($ch,CURLOPT_SSLCERTTYPE,'pem');   curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).'/cert/apiclient_key.pem');   curl_setopt($ch,CURLOPT_SSLCERTTYPE,'pem');   curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/cert/rootca.pem');   curl_setopt($ch,CURLOPT_POST,1);   curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);   $data=curl_exec($ch);   if($data){ //返回来的是xml格式需要转换成数组再提取值,用来做更新      curl_close($ch);      var_dump($data);   }else{      $error=curl_errno($ch);      echo "curl出错,错误代码:$error"."<br/>";      echo "<a href='http://curl.haxx.se/libcurl/c/libcurs.html'>;错误原因查询</a><br/>";      curl_close($ch);      echo false;   }}function arrayToXml($arr){   $xml = "<root>";   foreach ($arr as $key=>$val){      if(is_array($val)){         $xml.="<".$key.">".arrayToXml($val)."</".$key.">";      }else{         $xml.="<".$key.">".$val."</".$key.">";      }   }   $xml.="</root>";   return $xml ;}Home_index();



四.退款查询接口

如果上述退款调通了的话,那这个接口更简单了,只要把上述demo的参数换成退款查询的参数即可,这里就不赘述了

官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5

[php] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. $url = https://api.mch.weixin.qq.com/pay/refundquery  


原文地址:http://blog.csdn.net/ty_hf/article/details/52565321



0 0
原创粉丝点击