<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        微信小程序支付功能 php后臺對接完整代碼分享

        來源:懂視網 責編:小采 時間:2020-11-27 22:13:08
        文檔

        微信小程序支付功能 php后臺對接完整代碼分享

        微信小程序支付功能 php后臺對接完整代碼分享:微信小程序支付,php后臺對接完整代碼,全是干貨呀,拿過來可以直接使用。小程序在調起微信支付之前需要5個參數,這時候就需要攜帶code向后臺請求,然后后臺根據code獲取openid 再進行服務器之間的。 一、準備工作 1、小程序注冊,要以公司的以身份去注冊一個
        推薦度:
        導讀微信小程序支付功能 php后臺對接完整代碼分享:微信小程序支付,php后臺對接完整代碼,全是干貨呀,拿過來可以直接使用。小程序在調起微信支付之前需要5個參數,這時候就需要攜帶code向后臺請求,然后后臺根據code獲取openid 再進行服務器之間的。 一、準備工作 1、小程序注冊,要以公司的以身份去注冊一個

        微信小程序支付,php后臺對接完整代碼,全是干貨呀,拿過來可以直接使用。小程序在調起微信支付之前需要5個參數,這時候就需要攜帶code向后臺請求,然后后臺根據code獲取openid 再進行服務器之間的。

        一、準備工作

        1、小程序注冊,要以公司的以身份去注冊一個小程序,才有微信支付權限;

        2、綁定商戶號。

        3、在小程序填寫合法域

         二、完成以上條件,你可以得到

             小程序appid 小程序秘鑰    這兩個用于獲取用戶openid;

             商戶號id ,商戶號秘鑰     支付接口必須的;

        三、開始開發

        前臺代碼

         /* 
         調起微信支付 
         @param 支付價格,不填寫默認為1分錢 
        */ 
        function pay(total_fee) { 
         
         var total_fee = total_fee; 
         wx.login({ 
         success: res => { 
         
         //code 用于獲取openID的條件之一 
         var code = res.code; 
         wx.request({ 
         url: '后臺地址/index.php', 
         method: "POST", 
         data: { 
         total_fee:total_fee, 
         code: code, 
         }, 
         header: { 
         'content-type': 'application/x-www-form-urlencoded' // 默認值 
         }, 
         success: function (res) { //后端返回的數據 
         var data = res.data; 
         console.log(data); 
         console.log(data["timeStamp"]); 
         wx.requestPayment({ 
         timeStamp: data['timeStamp'], 
         nonceStr: data['nonceStr'], 
         package: data['package'], 
         signType: data['signType'], 
         paySign: data['paySign'], 
         success: function (res) { 
         wx.showModal({ 
         title: '支付成功', 
         content: '', 
         }) 
         }, 
         fail: function (res) { 
         console.log(res); 
         } 
         }) 
         } 
         }); 
         
         
         } 
         }) 
         
        } 

        以下是PHP后臺代碼 ,這里用的是tp框架

        <?php 
        namespace Home\Controller; 
        use Think\Controller; 
        class PayController extends Controller { 
         
         /** 
         * [callback 微信支付回調處理] 
         * @Author zhengmingzhou 
         * @DateTime 2018-05-22 
         * @return function [description] 
         */ 
         public function callback(){ 
         vendor("Wechart.WxPay.Api"); 
         vendor("Wechart.NativePay"); 
         vendor("Wechart.WxPay.Data"); 
         vendor("Wechart.WxPay.Notify"); 
         
         
         //獲取微信返回支付信息 
         $xml = $GLOBALS['HTTP_RAW_POST_DATA']; 
         $WxPayData = new \WxPayDataBase(); 
         $result = $WxPayData->FromXml($xml); 
         if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){ 
         //回調邏輯處理。。 
         
         
         //返回給微信的參數 
         $data['RETURN_CODE'] = 'SUCCESS'; 
         $data['RETURN_MSG'] = 'OK'; 
         
         
         }else{ 
         $data['RETURN_CODE'] = 'FAIL'; 
         $data['RETURN_MSG'] = 'NO'; 
         } 
         //返回給微信 
         $xml = self::arrtoxml($data); 
         echo $xml; 
         } 
         
         /** 
         * [arrtoxml 格式化返回給微信的數據格式] 
         * @Author zhengmingzhou 
         * @DateTime 2018-05-22 
         * @param [type] $arr [description] 
         * @return [type] [description] 
         */ 
         private function arrtoxml( $arr ){ 
         if(!$arr){ 
         return ''; 
         }else{ 
         $xml = "<xml>"; 
         foreach ($arr as $key=>$val) 
         { 
         if (is_numeric($val)){ 
         $xml.="<".$key.">".$val."</".$key.">"; 
         }else{ 
         $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; 
         } 
         } 
         $xml.="</xml>"; 
         return $xml; 
         } 
         } 
         
        //微信支付 
        public function pay(){ 
         //獲取openid 
         if(I("post.code")) 
         { //用code獲取openid 
         $code=I("post.code"); 
         $WX_APPID = '';//appid 
         $WX_SECRET = '';//AppSecret 
         $url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $WX_APPID . "&secret=" . $WX_SECRET . "&js_code=" . $code . "&grant_type=authorization_code"; 
         $infos = json_decode(file_get_contents($url)); 
         $openid = $infos->openid; 
         } 
         if(I("post.total_fee")) 
         { 
         $total_fee=I("post.total_fee"); 
         } 
         else 
         { 
         $total_fee=0.01; 
         } 
         
         $fee = 0.01;//舉例充值0.01 
         $appid = '';//appid 
         $body = '標題'; 
         $mch_id = ''; //商戶號 
         $nonce_str = $this->nonce_str();//隨機字符串 
         $notify_url = ''; //回調的url【自己填寫】 
         $openid = $openid; 
         $out_trade_no = $this->order_number();//商戶訂單號 
         $spbill_create_ip = '';//服務器的ip【自己填寫】; 
         $total_fee = $fee*100;//這里需要*100 
         $trade_type = 'JSAPI';//交易類型 默認 
         
         
         //這里是按照順序的 因為下面的簽名是按照順序 排序錯誤 肯定出錯 
         $post['appid'] = $appid; 
         $post['body'] = $body; 
         $post['mch_id'] = $mch_id; 
         $post['nonce_str'] = $nonce_str;//隨機字符串 
         $post['notify_url'] = $notify_url; 
         $post['openid'] = $openid; 
         $post['out_trade_no'] = $out_trade_no; 
         $post['spbill_create_ip'] = $spbill_create_ip;//終端的ip 
         $post['total_fee'] = $total_fee;//總金額 
         $post['trade_type'] = $trade_type; 
         $sign = $this->sign($post);//簽名 
         $post_xml = '<xml> 
         <appid>'.$appid.'</appid> 
         <body>'.$body.'</body> 
         <mch_id>'.$mch_id.'</mch_id> 
         <nonce_str>'.$nonce_str.'</nonce_str> 
         <notify_url>'.$notify_url.'</notify_url> 
         <openid>'.$openid.'</openid> 
         <out_trade_no>'.$out_trade_no.'</out_trade_no> 
         <spbill_create_ip>'.$spbill_create_ip.'</spbill_create_ip> 
         <total_fee>'.$total_fee.'</total_fee> 
         <trade_type>'.$trade_type.'</trade_type> 
         <sign>'.$sign.'</sign> 
         </xml> '; 
         
         
         //print_r($post_xml);die; 
         //統一接口prepay_id 
         $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; 
         $xml = $this->http_request($url,$post_xml); 
         
         $array = $this->xml($xml);//全要大寫 
         
         
         //print_r($array); 
         if($array['RETURN_CODE'] == 'SUCCESS' && $array['RESULT_CODE'] == 'SUCCESS'){ 
         $time = time(); 
         $tmp='';//臨時數組用于簽名 
         $tmp['appId'] = $appid; 
         $tmp['nonceStr'] = $nonce_str; 
         $tmp['package'] = 'prepay_id='.$array['PREPAY_ID']; 
         $tmp['signType'] = 'MD5'; 
         $tmp['timeStamp'] = "$time"; 
         
         
         $data['state'] = 200; 
         $data['timeStamp'] = "$time";//時間戳 
         $data['nonceStr'] = $nonce_str;//隨機字符串 
         $data['signType'] = 'MD5';//簽名算法,暫支持 MD5 
         $data['package'] = 'prepay_id='.$array['PREPAY_ID'];//統一下單接口返回的 prepay_id 參數值,提交格式如:prepay_id=* 
         $data['paySign'] = $this->sign($tmp);//簽名,具體簽名方案參見微信公眾號支付幫助文檔; 
         $data['out_trade_no'] = $out_trade_no; 
         
         
         }else{ 
         $data['state'] = 0; 
         $data['text'] = "錯誤"; 
         $data['RETURN_CODE'] = $array['RETURN_CODE']; 
         $data['RETURN_MSG'] = $array['RETURN_MSG']; 
         } 
         
         
         echo json_encode($data); 
        } 
        
         
        //隨機32位字符串 
        private function nonce_str(){ 
         $result = ''; 
         $str = 'QWERTYUIOPASDFGHJKLZXVBNMqwertyuioplkjhgfdsamnbvcxz'; 
         for ($i=0;$i<32;$i++){ 
         $result .= $str[rand(0,48)]; 
         } 
         return $result; 
        } 
         
         
        //生成訂單號 
        private function order_number($openid){ 
         //date('Ymd',time()).time().rand(10,99);//18位 
         return md5($openid.time().rand(10,99));//32位 
        } 
         
         
        //簽名 $data要先排好順序 
        private function sign($data){ 
         $stringA = ''; 
         foreach ($data as $key=>$value){ 
         if(!$value) continue; 
         if($stringA) $stringA .= '&'.$key."=".$value; 
         else $stringA = $key."=".$value; 
         } 
         $wx_key = '';//申請支付后有給予一個商戶賬號和密碼,登陸后自己設置的key 
         $stringSignTemp = $stringA.'&key='.$wx_key; 
         return strtoupper(md5($stringSignTemp)); 
        } 
         
         
        //curl請求 
        public function http_request($url,$data = null,$headers=array()) 
        { 
         $curl = curl_init(); 
         if( count($headers) >= 1 ){ 
         curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
         } 
         curl_setopt($curl, CURLOPT_URL, $url); 
         
         
         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 
         
         
         if (!empty($data)){ 
         curl_setopt($curl, CURLOPT_POST, 1); 
         curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
         } 
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
         $output = curl_exec($curl); 
         curl_close($curl); 
         return $output; 
        } 
         
         
        //獲取xml 
        private function xml($xml){ 
         $p = xml_parser_create(); 
         xml_parse_into_struct($p, $xml, $vals, $index); 
         xml_parser_free($p); 
         $data = ""; 
         foreach ($index as $key=>$value) { 
         if($key == 'xml' || $key == 'XML') continue; 
         $tag = $vals[$value[0]]['tag']; 
         $value = $vals[$value[0]]['value']; 
         $data[$tag] = $value; 
         } 
         return $data; 
        } 
         
        } 

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        微信小程序支付功能 php后臺對接完整代碼分享

        微信小程序支付功能 php后臺對接完整代碼分享:微信小程序支付,php后臺對接完整代碼,全是干貨呀,拿過來可以直接使用。小程序在調起微信支付之前需要5個參數,這時候就需要攜帶code向后臺請求,然后后臺根據code獲取openid 再進行服務器之間的。 一、準備工作 1、小程序注冊,要以公司的以身份去注冊一個
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久精品私人影院免费看| 四虎精品免费永久免费视频| 国产一精品一AV一免费| 亚洲色欲一区二区三区在线观看 | 国产亚洲精品无码拍拍拍色欲| 精品成人一区二区三区免费视频| 国产免费69成人精品视频| 深夜特黄a级毛片免费播放| 亚洲欧洲日本在线| a毛片在线免费观看| 亚洲视频在线免费观看| 一本岛高清v不卡免费一三区| 国产.亚洲.欧洲在线| 免费一级毛片在级播放| 人妻免费一区二区三区最新| 亚洲综合激情九月婷婷| 国产在线国偷精品产拍免费| 边摸边吃奶边做爽免费视频网站| 国产亚洲色视频在线| 黄网站色视频免费在线观看的a站最新 | 精品久久久久久亚洲| 亚洲 综合 国产 欧洲 丝袜| 一级特黄录像视频免费| 国产成人精品日本亚洲网站| h在线观看视频免费网站| 中文字幕亚洲情99在线| 免费乱理伦在线播放| 桃子视频在线观看高清免费视频| 亚洲国产日产无码精品| 国产伦精品一区二区三区免费迷 | 女性自慰aⅴ片高清免费| 五月天国产成人AV免费观看| 亚洲福利视频导航| 在线观看人成视频免费| 在线观看特色大片免费网站| 亚洲精品456人成在线| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 99久久免费国产精精品| 亚洲AV无码国产精品色| 国产日产亚洲系列| 无码高潮少妇毛多水多水免费|