php 微信 查询退款,微信api退款及退款查询

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

官方文档地址: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安全-->证书下载 。证书文件有四个,全部下载即可。

84279609_3

二.配置参数

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//签名

);

三.注意事项

常见问题:

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

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

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

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

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

6.注意下签名规则

84279609_6

7.CURL 返回值为58

答: 证书路径问题,证书路径应该为物理全路径,getcwd().'/apiclient_cert.pem'这种写法

或者自己函数获取

8.CURL 返回值为77

答:证书问题,重新下载证书,按照配置对应放在生产路径,同上一条,用全的物理路径。

demo源码

$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"."
";

echo";错误原因查询
";

curl_close($ch);

echo false;

}

}

functionarrayToXml($arr){

$xml ="";

foreach($arras$key=>$val){

if(is_array($val)){

$xml.="".arrayToXml($val)."".$key.">";

}else{

$xml.="".$val."".$key.">";

}

}

$xml.="";

return$xml ;

}

Home_index();

四.退款查询接口

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

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

$url= https://api.mch.weixin.qq.com/pay/refundquery

请求参数

字段名

变量名

必填

类型

示例值

描述

公众账号ID

appid

String(32)

wx8888888888888888

微信分配的公众账号ID(企业号corpid即为此appId)

商户号

mch_id

String(32)

1900000109

微信支付分配的商户号

设备号

device_info

String(32)

013467007045764

商户自定义的终端设备号,如门店编号、设备的ID等

随机字符串

nonce_str

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

随机字符串,不长于32位。推荐随机数生成算法

签名

sign

String(32)

C380BEC2BFD727A4B6845133519F3AD6

微信订单号

transaction_id

四选一

String(32)

1217752501201407033233368018

微信订单号

商户订单号

out_trade_no

String(32)

1217752501201407033233368018

商户系统内部的订单号

商户退款单号

out_refund_no

String(32)

1217752501201407033233368018

商户侧传给微信的退款单号

微信退款单号

refund_id

String(28)

1217752501201407033233368018

微信生成的退款单号,在申请退款接口有返回

举例如下:

wx2421b1c4370ec43b

10000100

0b9f35f484df17a732e537c37708d1d0

1415757673

66FFB727015F450D167EF38CCC549521

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值