美文网首页
微信申请退款

微信申请退款

作者: skymcl | 来源:发表于2017-11-21 18:49 被阅读0次
/*
     * 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);
     }

相关文章

网友评论

      本文标题:微信申请退款

      本文链接:https://www.haomeiwen.com/subject/ucowvxtx.html