/*
* 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);
}
微信申请退款
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 微信开发者应该都知道,官方接口订阅号每天群发一条,服务号每月群发4条,那么商超类企业或者集团,群发的需求显然很大,...
- 正常的申请app微信支付的流程是: 但自从2016年9月份,腾讯发布了《微信支付违规商户处理规则》后,很多商家的移...