php微信支付分开发 免押分享

先说一下这个版本 是V1.3的, 2020.03.15日更新版本   之前曾经做过一个支付分V1.0的。 v1.0和v1.3已经是大不一样了  ,所以如果你在做这个话看好版本,别让我带跑偏。

看到这篇文章,相信你已经做好了前期的准备工作,包括已经开通了微信支付分 ,向腾讯的商务提交了相关的文档 获得了 属于你自己的微信支付 service_id

微信支付分提供了比较详尽的文档  这次开发 也要接触到他 api-v3 接口规则

上个官方文档接口

微信支付分文档地址:   https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/payscore/chapter1_1.shtml

api-v3规则文档:           https://wechatpay-api.gitbook.io/wechatpay-api-v3/

当然了这个地址可能后面会有变更  那你就去百度找一下吧

首先咱们最重要的是创建微信支付分订单   不说了 直接上代码

 1 public function zhiFen($order0no='', $ya_money=2)  2     {  3         $url = "https://api.mch.weixin.qq.com/v3/payscore/serviceorder";  4         $json = [ // JSON请求体  5             'out_order_no' => $order0no,//订单号  6             'appid' => '',  7             'service_id' => '',  8             'service_introduction' => '陪护宝使用租金',  9             'time_range' => ['start_time' => 'OnAccept'], 10             'risk_fund' => ['name' => 'DEPOSIT', 'amount' => 2], 11             'notify_url' => url('index', '', false, true), 12             'need_user_confirm' => true, 13         ]; 14  15         $arr_header[] = "Content-Type: application/json"; 16         $arr_header[] = "Accept: application/json"; 17         $arr_header[] = "User-Agent: " . $_SERVER['HTTP_USER_AGENT']; 18  19         $http_method = 'POST'; 20         $timestamp = time(); 21         $nonce = $this->str_rand(32); 22         $body = json_encode($json, true); 23         $merchant_id = '';  //商户号 24         $serial_no = '';       //这个是证书号  这个必须使用新版证书 25  26         $url_parts = parse_url($url); 27         $path = APP_PATH . 'cert/'; 28         $mch_private_key = PemUtil::loadPrivateKey($path . 'apiclient_key.pem'); 29  30         $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : "")); 31         $message = $http_method . "n" . 32             $canonical_url . "n" . 33             $timestamp . "n" . 34             $nonce . "n" . 35             $body . "n"; 36  37         openssl_sign($message, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption'); 38         $sign = base64_encode($raw_sign); 39  40         $schema = 'WECHATPAY2-SHA256-RSA2048 '; 41         $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"', 42             $merchant_id, $nonce, $timestamp, $serial_no, $sign); 43         //这个是生成认证参数  并加到请求头中 44         $arr_header[] = "Authorization:" . $schema . $token; 45         $res = $this->https_request($url, json_encode($json), $arr_header); 46         $res_arr = json_decode($res, true); 47         $sign_type = "HMAC-SHA256";//HMAC-SHA256签名方式 48         $key = "hHezylOkgatMqYKrVeQthR4qfGvyOebD"; 49         $res_arr['timestamp'] = $timestamp; 50         $res_arr['nonce_str'] = $nonce; 51         $res_arr['sign_type'] = $sign_type; 52  53         $res_arr['sign'] = bc_sign([ 54             'mch_id'=>$merchant_id, 55             'package'=>$res_arr['package'], 56             'timestamp'=>$timestamp, 57             'nonce_str'=>$nonce, 58             'sign_type'=>$sign_type, 59         ],$key); 60         $this->success('', $res_arr); 61     } 62  63     //生成随机字符串 64     public function str_rand($length = 32, $char = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') 65     { 66         if (!is_int($length) || $length < 0) { 67             return false; 68         } 69         $string = ''; 70         for ($i = $length; $i > 0; $i--) { 71             $string .= $char[mt_rand(0, strlen($char) - 1)]; 72         } 73  74         return $string; 75     } 76  77     //请求方法     78     private function https_request($url, $data = null, $arr_header = []) 79     { 80         $curl = curl_init(); 81         //curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false); 82         curl_setopt($curl, CURLOPT_URL, $url); 83         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 84         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 85         if (!empty ($data)) { 86             curl_setopt($curl, CURLOPT_POST, 1); 87             curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 88         } 89  90         if (!empty($arr_header)) { 91             curl_setopt($curl, CURLOPT_HTTPHEADER, $arr_header); 92         } 93  94         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 95         $output = curl_exec($curl); 96         curl_close($curl); 97         return $output; 98     } 99

这个就是这个的请求方法   生成签名的这个应该封装一下   这里为了更好的展现  我就没有封装  ,  其实微信官方提供了一个composer封装的方法  但是我么有用   用的这种简单粗暴的方法

通过这个请求

—-想了解更多的php相关异常处理怎么解决关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/phpttorial/119429.html

(0)
上一篇 2020年6月2日
下一篇 2020年6月2日

精彩推荐