后端
$appid='wx1234567890'; //这是公众号的appid
$mch_id='1500000000'; //商户号(登录 pay.weixin.qq.com,在【产品中心】-【开发配置】里会看到)
$nonce_str='abcdddddddddddd';//随机字符串,随便一串字母即可
$out_refund_no='r'.time(); //退款单号,不重复即可
$total_fee=1000; //原订单金额,单位不是元,而是分
$refund_fee=200; //退款金额,单位是分,<=$total_fee
$transaction_id="4200000299201905147901111111";//原微信支付交易号
$key="abcde12345";//在pay.weixin.qq.com里设定的密钥
//拼接字段
$stringA='appid='.$appid.'&mch_id='.$mch_id.'&nonce_str='.$nonce_str.'&out_refund_no='.$out_refund_no.'&refund_fee='.$refund_fee.'&total_fee='.$total_fee.'&transaction_id='.$transaction_id;
//加上key
$stringSignTemp=$stringA."&key=".$key;
//MD5
$signValue=MD5($stringSignTemp);
//转大写
$sign=strtoupper($signValue);
$data="xml字符串";//xml格式在html里显示不出,请看最后附图
//var_dump($data);
$url="https://api.mch.weixin.qq.com/secapi/pay/refund";
$ch = curl_init();
//超时时间
curl_setopt($ch,CURLOPT_TIMEOUT,30);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
//设置header
curl_setopt($ch,CURLOPT_HEADER,FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
//设置证书
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT, 'D:/cert/apiclient_cert.pem'); //证书在服务器上的绝对路径
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY,'D:/cert/apiclient_key.pem'); //证书在服务器上的绝对路径
//post提交方式
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$res = curl_exec($ch);
curl_close($ch);
var_dump($res);
注意事项
1 替换参数
2. 替换证书文件