微信支付退款php代码参考

微信支付退款
微信支付退款文档https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_4&index=6
代码参考
//微信账号信息
$config =>array(
    "app_id"=>"",
    "secret"=>"",
    'sign_key'=>"支付key",
    'name'=>"xxx",
    'mch_id'=>'xxx'//商户号
);
//退款详情
$srcData = array(
    "appid"=>"",
    "mch_id"=>"",
    "nonce_str"=>"1bdcf1b810955ef1d1e17103329abca9",//随机数
    "out_trade_no"=>"",//平台订单号
    "out_refund_no"=>$out_refund_no,//退款订单号,根据自己平台订单规则生成
    "total_fee"=>"",
    "refund_fee"=>"",
    "refund_desc"=>"红包退款",
);
//退款
function  refund($srcData){
        ksort($srcData);
        $srcStr = '';
        foreach ($srcData as $key => $val) {
            if ( $key!='key' && $val != '') {
                $srcStr .= '&' . $key . '=' . $val;
            }
        }
        $srcStr = substr($srcStr, 1);
        $signKey = $config['sign_key'];
        $str = $srcStr . '&key=' .$signKey;
        $signResult = strtoupper(md5($str));
        $params = "<xml>
<appid>{$srcData['appid']}</appid>
<mch_id>{$srcData['mch_id']}</mch_id>
<nonce_str>{$srcData['nonce_str']}</nonce_str>
<out_trade_no>{$srcData['out_trade_no']}</out_trade_no>
<out_refund_no>{$srcData['out_refund_no']}</out_refund_no>
<total_fee>{$srcData['total_fee']}</total_fee>
<refund_fee>{$srcData['refund_fee']}</refund_fee>
<refund_desc>{$srcData['refund_desc']}</refund_desc>
<sign>$signResult</sign>
</xml>";
        //微信退款需要双向证书
        $res = self::curl_post_ssl('https://api.mch.weixin.qq.com/secapi/pay/refund', $params);

        $res = self::xml2array($res);
        return $res;
    }
//微信支付证书,申请通过后,微信会将证书通过邮件发到申请邮箱
function curl_post_ssl($url, $vars, $second=30,$aHeader=array())
{
    $ch = curl_init();
    //超时时间
    curl_setopt($ch,CURLOPT_TIMEOUT,$second);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
    //这里设置代理,如果有的话
    //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
    //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
    //以下两种方式需选择一种
    //微信支付证书
    $path = ROOT."/key/wx_pay/";
    //第一种方法,cert 与 key 分别属于两个.pem文件
    //默认格式为PEM,可以注释
    curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
    curl_setopt($ch,CURLOPT_SSLCERT,$path.'/apiclient_cert.pem');
    //默认格式为PEM,可以注释
    curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
    curl_setopt($ch,CURLOPT_SSLKEY,$path.'/apiclient_key.pem');

    //第二种方式,两个文件合成一个.pem文件
    //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');

    if( count($aHeader) >= 1 ){
        curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
    }

    curl_setopt($ch,CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
    $data = curl_exec($ch);
    if($data){
        curl_close($ch);
        return $data;
    }
    else {
        $error = curl_errno($ch);
        echo "call faild, errorCode:$error\n";
        curl_close($ch);
        return false;
    }
}
//XML转为数组
public function xml2array($xml){
    return json_decode(json_encode((array) simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值