PS:本篇文章主要是对PHP实现小程序退款以及退款回调数据解密的流程做大概解释,代码请各位按照自身需求进行修改
小程序js代码:
refundOrder(){
var refund = this
wx.request({
url: 'http://127.0.0.1:2910/wxPayV2/refundOrder/refundOrderAction.php', //此处写你的PHP文件地址
method:'POST',
header:{
'content-type':'application/x-www-form-urlencoded'
},
data:{
'out_trade_no':'商户订单号',
'refund_fee':'1' //退款金额,单位为分
},
success(res){
console.log(res)
}
})
},
PHP微信v2退款类文件
refundOrder.php
<?php
require_once dirname(__FILE__,3).'/config/appConfig.php';
require_once dirname(__FILE__,2).'/createOrder/createOrder.php';
class refundOrder
{
/**
* 获取相关基本配置
*/
public function __construct(){
$this -> APIv2 = APIv2;
$this -> appid = appid;
$this -> mch_id = mch_id;
}
/**
* 生成32位随机字符串
* @return false|string
*/
public function nonce_str(){
$getData = new createOrder;
return $getData -> nonce_str();
}
/**
* 生成商户退款单号
* @return string
*/
public function out_refund_no(): string
{
$getData = new createOrder;
$data = $getData -> out_trade_no();
return 'T'.$data;
}
/**
* 返回参与签名的数据主体
* @param $nonce_str :32位随机字符串
* @param $transaction_id :微信支付订单号
* @param $out_refund_no :商户退款单号
* @param $total_fee :订单总金额
* @param $refund_fee :退款金额
* @return array
*/
public function signBody($nonce_str,$transaction_id,$out_refund_no,$total_fee,$refund_fee): array
{
$data = array(
'appid' => $this -> appid,
'mch_id' => $this -> mch_id,
'nonce_str' => $nonce_str,
'sign_type' => 'MD5',
'transaction_id' => $transaction_id,
'out_refund_no' => $out_refund_no,
'total_fee' => $total_fee,
'refund_fee' => $refund_fee,
);
ksort($data);
return $data;
}
/**
* 将参与签名的数据转换字符串并连接APIv2
* @param $data :参与签名的数据主体(array)
* @return string
*/
public function disposeSignBody($data): string
{
$signBody = '';
foreach ($data as $key => $val){
$signBody .= "$key=$val&";
}
$signBody .= "key=$this->APIv2";
return $signBody;
}
/**
* 返回签名值
* @param $signBody :经过处理后的待签名数据
* @return string
*/
public function sign($signBody): string
{
return strtoupper(MD5($signBody));
}
/**
* 生成访问微信退款接口的参数主体
* @param $sign :签名值
* @param $signBody :参与签名的数据主体
* @return string
*/
public function requestBody($sign,$signBody): string
{
$signArray = array(
'sign' => $sign
);
$requestArray = array_merge($signArray