微信退款开发过程

xiaoxiao2021-02-28  32

[php]  view plain  copy  print ? 微信退款需要配置的数据有:   公众号的  $appid   商户号  $mch_id    随机字符串 $nonce_str   商户订单号  $out_trade_no   商户退单号  $out_refund_no   退款总金额  $refund_fee      订单总金额  $total_fee       操作员帐号  $op_user_id      商户平台中对应的key值 $key   ---------------------------------   注意事项:   1.订单总金额和退款总金额是 处理单位是分 而且只能是整数   2.操作员账号 可以 用商户号就可以   3.商户退单号:自己随机一个只要不重复就可以,为了方便只要放上订单号就行本身也是不重复的   ----------------------------------   使用:       根据上面的信息进行签名生成:       1.生成一个随机字符串       // 签名设置中随机字符串           function nonceStr(){               $chars = "abcdefghijklmnopqrstuvwxyz0123456789";                 $str ="";               $length = 32;               for($i = 0; $i < $length$i++){                     $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);                 }                // 随机字符串               return $str;           }       2.签名生成           $arrayName = array('op_user_id'=>$op_user_id,'refund_fee'=>$refund_fee,           'total_fee'=>$total_fee,'appid'=>$appid,'mch_id'=>$mch_id,'out_trade_no'=>$out_trade_no,           'nonce_str'=>$nonce_str,'out_refund_no'=>$out_refund_no);           ksort($arrayName);           $sign = '';           foreach ($arrayName as $key => $value) {               $sign.='&'.$key.'='.$value;           }           // 进行拼凑           // 去掉开头的&并且进行MD5加密处理           $stringSignTemp = ltrim($sign,'&');           $key = "商户号申请的时候你自己的输入的key值";           $stringSignTemp =  $stringSignTemp.'&key='.$key;           $sign = md5($stringSignTemp);           $sign = strtoupper($sign);// 最终获得签名的值       3.把上面的所有数据进行组成xml数据           $xmldata = "<xml><appid>".$appid."</appid><mch_id>".$mch_id."</mch_id><nonce_str>"                .$nonce_str."</nonce_str><op_user_id>".$op_user_id."</op_user_id><out_refund_no>".                $out_refund_no."</out_refund_no><out_trade_no>"$out_trade_no."</out_trade_no><refund_fee>".                $refund_fee ."</refund_fee><total_fee>"$total_fee."</total_fee><sign>".$sign."</sign></xml>";       4.微信退款接口准备:           $url = 'https://api.mch.weixin.qq.com/secapi/pay/refund';// 退款微信接口准备       5.进行curl 有证书post数据           function postXmlCurl($xmldata$url$useCert = false, $second = 6)           {                      // 证书验证与否                  $ch = curl_init();               // 设置超时               curl_setopt($ch, CURLOPT_TIMEOUT, $second);               curl_setopt($ch,CURLOPT_URL, $url);               curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);               curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验               // 设置header               curl_setopt($ch, CURLOPT_HEADER, FALSE);               // 要求结果为字符串且输出到屏幕上               curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);               // 退款严格使用证书,必须是公众号所对应的商户平台下的证书才可以,安全不的外泄               if($useCert == true){                   // 设置证书                   // 使用证书:cert 与 key 分别属于两个.pem文件                   curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');                   curl_setopt($ch,CURLOPT_SSLCERT,ROOT_PATH."wxpay/cert/apiclient_cert.pem");                   curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');                   curl_setopt($ch,CURLOPT_SSLKEY,ROOT_PATH."wxpay/cert/apiclient_key.pem");               }               // post提交方式               curl_setopt($ch, CURLOPT_POST, TRUE);               curl_setopt($ch, CURLOPT_POSTFIELDS, $xmldata);               // 运行curl               $xml = curl_exec($ch);               // 返回结果0的时候能只能表明程序是正常返回不一定说明退款成功而已               if($xml){                   curl_close($ch);                   // 把xml转化成数组                   libxml_disable_entity_loader(true);                    $xmlstring = simplexml_load_string($xml'SimpleXMLElement', LIBXML_NOCDATA);                    $result['errNum'] = 0;                   $result['info'] = objectToArray($xmlstring);                   return $result;               }else{                    $error = curl_errno($ch);                   curl_close($ch);                   // 错误的时候返回错误码。                   $result['errNum'] = $error;                   return $result;               }           }       注意:开发过程中,遇到的问题:证书:需要在上商户平台中获得然后根据自己的实际路径进行填写。  
转载请注明原文地址: https://www.6miu.com/read-600246.html

最新回复(0)