http://blog.csdn.net/ty_hf/article/details/52565321
<?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
- $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 | 微信生成的退款单号,在申请退款接口有返回 |
举例如下:
<xml>
<appid>wx2421b1c4370ec43b</appid>
<mch_id>10000100</mch_id>
<nonce_str>0b9f35f484df17a732e537c37708d1d0</nonce_str>
<out_refund_no></out_refund_no>
<out_trade_no>1415757673</out_trade_no>
<refund_id></refund_id>
<transaction_id></transaction_id>
<sign>66FFB727015F450D167EF38CCC549521</sign>
</xml>