/*
* exp 微信:申请退款
* params array[out_trade_no,out_refund_no,total_fee,total_fee,refund_desc]
* return json{result, message, datas, ordersn}
* authod sky
*/
public static function returnPayMoney($params)
{
// 返回数据s
$json = array('result' => false);
//存储信息
$newPara = array();
//应用ID
$newPara["appid"] = self::$appid;
//商户号
$newPara["mch_id"] = self::$mch_id;
//随机字符串
$newPara["nonce_str"] = self::getRandKey();
//商户订单号
$newPara["out_trade_no"] = $params['out_trade_no'];
//商户退款单号
// $newPara["out_refund_no "] = $params['out_refund_no '];
$newPara["out_refund_no"] = $params['out_refund_no'];
//订单金额
// $newPara["total_fee"] = $params['total_fee'];
$newPara["total_fee"] = 1;
//退款金额
// $newPara["refund_fee"] = $params['refund_fee'];
$newPara["refund_fee"] = 1;
//退款原因
// $newPara["refund_desc"] = $params['refund_desc'];
$newPara["refund_desc"] = "订单超时";
//签名
$newPara["sign"] = self::wechatRefundSign($newPara,self::$key);
//把数组转化成xml格式
$xmlData = self::getWeChatXML($newPara);
//利用PHP的CURL包,将数据传给微信申请退款接口,返回结果
$get_data = self::refundPrePayCurl($xmlData);
// var_dump(base_path('public'));
// return ;
//返回的结果进行判断。
if ($get_data['return_code'] == "SUCCESS" && $get_data['return_msg'] == "") {
//退款成功,请在下面空白处,完成业务逻辑
/*****************************/
// return json_encode();
return "申请退款成功";
} else {
$json['message'] = $get_data['return_msg'];
$json['get_data'] = $get_data;
}
return $json;
}
//微信退款签名函数 sky
public static function wechatRefundSign($array, $wechatKey)
{
ksort($array);
foreach ($array as $key => $val) {
$array[$key] = $key . '=' . $val;
}
$str = implode($array, "&");
return strtoupper(MD5($str . '&key=' . $wechatKey));
}
//通过curl发送数据给微信申请退款接口的函数 sky
protected static function refundPrePayCurl($xmlData)
{
$rootUrl = base_path('public'); // 获取路径
$url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
$header[] = "Content-type: text/xml";
$curl = curl_init();// 创建一个新cURL资源
// 设置URL和相应的选项
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl,CURLOPT_SSLCERT, $rootUrl.'/refund/rootca.pem');
curl_setopt($curl,CURLOPT_SSLCERTPASSWD,'000000');
curl_setopt($curl,CURLOPT_SSLCERT, $rootUrl.'/refund/apiclient_cert.pem');
curl_setopt($curl,CURLOPT_SSLKEY, $rootUrl.'/refund/apiclient_key.pem');
//rootca.pem、apiclient_cert.pem、apiclient_key.pem文件登陆微信商户平台 下载放在响应问目录下即可(微信商户平台(pay.weixin.qq.com)-->账户中心-->账户设置-->API安全-->证书下载 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $xmlData);
// CURLOPT_TIMEOUT:超时时间
// CURLOPT_RETURNTRANSFER:是否要求返回数据
// CURLOPT_SSL_VERIFYPEER:是否检测服务器的证书是否由正规浏览器认证过的授权CA颁发的
// CURLOPT_SSL_VERIFYHOST:是否检测服务器的域名与证书上的是否一致
// CURLOPT_SSLCERTTYPE:证书类型,"PEM" (default), "DER", and"ENG".
// CURLOPT_SSLCERT:证书存放路径
// CURLOPT_SSLCERTPASSWD:证书密码
// CURLOPT_SSLKEYTYPE:私钥类型,"PEM" (default), "DER", and"ENG".
// CURLOPT_SSLKEY:私钥存放路径
$data = curl_exec($curl);// 抓取URL并把它传递给浏览器
if (curl_errno($curl)) {
print curl_error($curl);
}
curl_close($curl);// 关闭cURL资源,并且释放系统资源
return self::XMLDataParse($data);
}
网友评论