亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序支付PHP代碼

2020-03-21 16:11:44
字體:
來源:轉載
供稿:網友

本文實例為大家分享了微信小程序支付PHP具體代碼,供大家參考,具體內容如下

服務器端獲取 openid

Getopenid.php

 

<?php  header('Content-type: application/json; charset=UTF-8');  $APPID="";//填寫小程序appid  $SECRET="";//填寫小程序secret  $JSCODE="";  if(isset($_GET['js_code'])){    $JSCODE=$_GET['js_code'];    $url="https://api.weixin.qq.com/sns/jscode2session?appid=".$APPID    ."&secret=".$SECRET."&js_code=".$JSCODE."&grant_type=authorization_code";    $curl = curl_init();    curl_setopt($curl, CURLOPT_URL, $url);    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    curl_setopt($curl, CURLOPT_HEADER, 0);    $data = curl_exec($curl);    $array=json_decode($data,true);    curl_close($curl);    $openid=isset($array['openid'])?$array['openid']:$array['errcode'];    if($openid=="40029"){      $response["result"] = 0;      $response["msg"] = "invalid code";      $response["openid"] = $openid;      echo json_encode($response);    }else{      $response["result"] = 1;      $response["msg"] = "user exist";      $response["openid"] = $openid;      echo json_encode($response);    }  }

小程序存儲openid 
在app.js中

getUserInfo:function(cb){  var that = this  if(this.globalData.userInfo){   typeof cb == "function" && cb(this.globalData.userInfo)  }else{   wx.login({    success: function (res) {     if (res.code) {      var code = res.code;      wx.getUserInfo({       success: function (res2) {        console.log(res2);        that.globalData.userInfo = res2.userInfo;        typeof cb == "function" && cb(that.globalData.userInfo)        var encryptedData = encodeURIComponent(res2.encryptedData);//一定要把加密串轉成URI編碼        var iv = res2.iv;        //請求自己的服務器        //Login(code, encryptedData, iv);        wx.showToast({         title: '正在登錄...',         icon: 'loading',         duration: 10000        });        //請求服務器        wx.request({         url: API_URL,//Getopenid.php         data: {          js_code: code,         },         method: 'GET',         header: {          'content-type': 'application/json'         }, // 設置請求的 header         success: function (res) {          // success          wx.hideToast();          console.log("JSON:" + res.data);          if (res.data.result=="1"){//獲取openid成功           wx.setStorage({//存儲openid            key: "openid",            data: res.data.openid           })          }else{           wx.showToast({            title: 'openid獲取失敗',            icon: 'none',            duration: 2000           })          }          console.log('服務器返回' + res.data.result);          console.log('服務器返回' + res.data.msg);          console.log('服務器返回' + res.data.openid);         },         fail: function () {          // fail          // wx.hideToast();         },         complete: function () {          // complete         }        })       }      })     } else {      console.log('獲取用戶登錄態失?。?#39; + res.errMsg)     }    }   })  } }

在登陸界面獲取openid

var app = getApp()onLoad: function () {  console.log('onLoad')  var that = this  //調用應用實例的方法獲取全局數據  app.getUserInfo(function(userInfo){//獲取用戶信息    //更新數據   that.setData({    userInfo:userInfo   }) })}

通過以上步驟已經獲取到openid

支付方法小程序

pay() {  var that = this;  if (this.data.totalPrice == 0) {   return;  }  wx.getStorage({//獲取存儲在本地的openid   key: 'openid',   success: function (res) {    console.log(res.data)    that.setData({     openid:res.data,    })    var carArray = that.data.carArray;    var str="";    for (var i = 0; i < carArray.length; i++) {     str=str+ carArray[i].num+"個" + carArray[i].name+" ";    }    wx.request({     url: 'Pay.php',//支付接口     data: {      openid: res.data,//openid      total_fee: that.data.totalPrice,//總金額      body: str,//商品描述     },     method:'GET',     success:function(res){      console.log(res.data['timeStamp'])      if(res.data){       wx.requestPayment({        'timeStamp': res.data['timeStamp'],        'nonceStr': res.data['nonceStr'],        'package': res.data['package'],        'signType': 'MD5',        'paySign': res.data['paySign'],        'success': function (res) {         wx.showToast({          title: '支付成功',          icon: 'succes',          duration: 1000,          mask: true         })         //支付成功后在數據庫減去購買商品的數量         var carArray = that.data.carArray;         for (var i = 0; i < carArray.length; i++) {          that.setData({           jiesuan_num: carArray[i].num,           jiesuan_id: carArray[i].goods_id,          })          DeGood(that);         }        },        'fail': function (res) {         wx.showToast({          title: '支付失敗',          icon: 'none',          duration: 1000,          mask: true         })        }       })      }     }    })   }  }) },

Pay.php

<?php  include 'WeixinPay.php';   $appid=''; //小程序appid  $openid= $_GET['openid'];   $mch_id=''; //商戶id  $key=''; //商戶key  $out_trade_no = $mch_id. time();   $total_fee = $_GET['total_fee'];   $body= $_GET['body'];  if(empty($total_fee)){     $body = $body;     $total_fee = floatval(99*100);   }else{     $body = $body;     $total_fee = floatval($total_fee*100);   }   $weixinpay = new WeixinPay($appid,$openid,$mch_id,$key,$out_trade_no,$body,$total_fee);   $return=$weixinpay->pay();   echo json_encode($return); 

WeixinPay.php

<?php/* * 小程序微信支付 */class WeixinPay {  protected $appid;  protected $mch_id;  protected $key;  protected $openid;  protected $out_trade_no;  protected $body;  protected $total_fee;      function __construct($appid, $openid, $mch_id, $key,$out_trade_no,$body,$total_fee) {    $this->appid = $appid;    $this->openid = $openid;    $this->mch_id = $mch_id;    $this->key = $key;    $this->out_trade_no = $out_trade_no;    $this->body = $body;    $this->total_fee = $total_fee;  }  public function pay() {    //統一下單接口    $return = $this->weixinapp();    return $return;  }  //統一下單接口  private function unifiedorder() {    $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';    $parameters = array(      'appid' => $this->appid, //小程序ID      'mch_id' => $this->mch_id, //商戶號      'nonce_str' => $this->createNoncestr(), //隨機字符串//      'body' => 'test', //商品描述      'body' => $this->body,//      'out_trade_no' => '2015450806125348', //商戶訂單號      'out_trade_no'=> $this->out_trade_no,//      'total_fee' => floatval(0.01 * 100), //總金額 單位 分      'total_fee' => $this->total_fee,//      'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], //終端IP      'spbill_create_ip' => '192.168.0.161', //終端IP      'notify_url' => 'http://www.weixin.qq.com/wxpay/pay.php', //通知地址 確保外網能正常訪問      'openid' => $this->openid, //用戶id      'trade_type' => 'JSAPI'//交易類型    );    //統一下單簽名    $parameters['sign'] = $this->getSign($parameters);    $xmlData = $this->arrayToXml($parameters);    $return = $this->xmlToArray($this->postXmlCurl($xmlData, $url, 60));    return $return;  }  private static function postXmlCurl($xml, $url, $second = 30)   {    $ch = curl_init();    //設置超時    curl_setopt($ch, CURLOPT_TIMEOUT, $second);    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //嚴格校驗    //設置header    curl_setopt($ch, CURLOPT_HEADER, FALSE);    //要求結果為字符串且輸出到屏幕上    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);    //post提交方式    curl_setopt($ch, CURLOPT_POST, TRUE);    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);    curl_setopt($ch, CURLOPT_TIMEOUT, 40);    set_time_limit(0);    //運行curl    $data = curl_exec($ch);    //返回結果    if ($data) {      curl_close($ch);      return $data;    } else {      $error = curl_errno($ch);      curl_close($ch);      throw new WxPayException("curl出錯,錯誤碼:$error");    }  }  //數組轉換成xml  private function arrayToXml($arr) {    $xml = "<root>";    foreach ($arr as $key => $val) {      if (is_array($val)) {        $xml .= "<" . $key . ">" . arrayToXml($val) . "</" . $key . ">";      } else {        $xml .= "<" . $key . ">" . $val . "</" . $key . ">";      }    }    $xml .= "</root>";    return $xml;  }  //xml轉換成數組  private function xmlToArray($xml) {    //禁止引用外部xml實體     libxml_disable_entity_loader(true);    $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);    $val = json_decode(json_encode($xmlstring), true);    return $val;  }  //微信小程序接口  private function weixinapp() {    //統一下單接口    $unifiedorder = $this->unifiedorder();//    print_r($unifiedorder);    $parameters = array(      'appId' => $this->appid, //小程序ID      'timeStamp' => '' . time() . '', //時間戳      'nonceStr' => $this->createNoncestr(), //隨機串      'package' => 'prepay_id=' . $unifiedorder['prepay_id'], //數據包      'signType' => 'MD5'//簽名方式    );    //簽名    $parameters['paySign'] = $this->getSign($parameters);    return $parameters;  }  //作用:產生隨機字符串,不長于32位  private function createNoncestr($length = 32) {    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";    $str = "";    for ($i = 0; $i < $length; $i++) {      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);    }    return $str;  }  //作用:生成簽名  private function getSign($Obj) {    foreach ($Obj as $k => $v) {      $Parameters[$k] = $v;    }    //簽名步驟一:按字典序排序參數    ksort($Parameters);    $String = $this->formatBizQueryParaMap($Parameters, false);    //簽名步驟二:在string后加入KEY    $String = $String . "&key=" . $this->key;    //簽名步驟三:MD5加密    $String = md5($String);    //簽名步驟四:所有字符轉為大寫    $result_ = strtoupper($String);    return $result_;  }  ///作用:格式化參數,簽名過程需要使用  private function formatBizQueryParaMap($paraMap, $urlencode) {    $buff = "";    ksort($paraMap);    foreach ($paraMap as $k => $v) {      if ($urlencode) {        $v = urlencode($v);      }      $buff .= $k . "=" . $v . "&";    }    $reqPar;    if (strlen($buff) > 0) {      $reqPar = substr($buff, 0, strlen($buff) - 1);    }    return $reqPar;  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线观看视频99| 青青草99啪国产免费| 国产精品一区二区女厕厕| 国产不卡av在线| 欧美激情videos| 日韩高清中文字幕| 一区二区在线视频播放| 国产日韩精品在线播放| 中文字幕成人在线| 中文字幕一区二区三区电影| 欧美日韩在线看| 国产日韩在线观看av| 欧美激情第6页| 一区二区成人av| 午夜精品久久17c| 91av在线影院| 欧美午夜激情在线| 日韩精品极品在线观看| 日韩av免费观影| 韩剧1988免费观看全集| 尤物九九久久国产精品的特点| 久热精品在线视频| 91av福利视频| 久久久国产精品x99av| 操人视频在线观看欧美| 亚洲综合精品伊人久久| 91av国产在线| 亚洲91精品在线| 亚洲国产精品电影在线观看| 久久艳片www.17c.com| 国产精品一区久久久| 久久视频中文字幕| 亚洲精品资源在线| 久久国产精品久久久久久| 2018中文字幕一区二区三区| 亚洲va男人天堂| 国产99视频在线观看| 91天堂在线观看| 91精品视频网站| 正在播放欧美一区| 成人动漫网站在线观看| 欧美激情亚洲视频| 日韩免费观看高清| 成人免费观看49www在线观看| 日本久久久久久| 尤物yw午夜国产精品视频| 亚洲一区二区在线播放| 欧美福利视频在线观看| 亚洲影院色在线观看免费| 免费不卡欧美自拍视频| 一本一本久久a久久精品综合小说| 国产视频在线一区二区| 精品国产福利在线| 欧美中文在线免费| 久久久久免费视频| 久久精品国产96久久久香蕉| 啪一啪鲁一鲁2019在线视频| 亚洲视频axxx| 亚洲欧美精品伊人久久| 欧美在线不卡区| 精品久久在线播放| 欧美精品一区二区三区国产精品| 91手机视频在线观看| 日韩中文在线中文网在线观看| 精品日韩美女的视频高清| www.亚洲免费视频| 国产精品美乳一区二区免费| 成人国产精品av| 在线播放国产一区中文字幕剧情欧美| 在线观看欧美www| 日韩动漫免费观看电视剧高清| 亚洲精品电影在线观看| 一区二区三区四区视频| 在线免费看av不卡| 欧美黑人国产人伦爽爽爽| 91精品国产综合久久男男| 日韩中文综合网| 性色av一区二区三区在线观看| 成人免费高清完整版在线观看| 久久久久日韩精品久久久男男| 欧美一乱一性一交一视频| 精品久久久精品| 久久综合网hezyo| 亚洲一区二区三区四区在线播放| 中文字幕综合在线| 久久夜精品va视频免费观看| 国产成人高潮免费观看精品| 在线观看日韩www视频免费| 欧美成人免费一级人片100| 91精品国产综合久久香蕉最新版| 亚洲成人网av| 国产精品免费视频久久久| 97人人爽人人喊人人模波多| 日韩一区二区在线视频| 日韩在线观看网址| 丝袜情趣国产精品| 国产色视频一区| 青青在线视频一区二区三区| 日韩在线观看免费高清| 一区二区三区视频免费在线观看| 精品国内亚洲在观看18黄| 久久久精品国产一区二区| 亚洲va久久久噜噜噜久久天堂| 欧美性猛交xxxx免费看久久久| 青青久久av北条麻妃黑人| 久久99视频免费| 97视频在线观看亚洲| 亚洲福利在线视频| 亚洲国产中文字幕久久网| 国产主播在线一区| 日韩中文字幕网站| 韩日欧美一区二区| 8050国产精品久久久久久| 国产美女被下药99| 亚洲欧美国产高清va在线播| 亚洲天堂av在线免费| www亚洲精品| 亚洲美女av在线播放| 国产成人aa精品一区在线播放| 欧美日韩一区二区三区在线免费观看| 亚洲福利视频网| 欧美三级免费观看| 久久精品免费播放| 国产成人精品电影| 日韩中文视频免费在线观看| 国产精品a久久久久久| 欧美精品久久久久a| 成人精品在线观看| 亚洲国产精品久久精品怡红院| 51精品在线观看| 亚洲国产天堂网精品网站| 一个人看的www久久| 欧美日韩精品中文字幕| 91精品国产综合久久香蕉| 久久999免费视频| 自拍偷拍亚洲区| 久久久噜噜噜久久中文字免| 成人性生交大片免费看小说| 国产在线观看精品一区二区三区| 亚洲欧美一区二区三区在线| 亚洲综合自拍一区| 欧美精品在线播放| 秋霞av国产精品一区| 色婷婷综合久久久久中文字幕1| 国产精品久久久久久久久借妻| 日韩av中文字幕在线免费观看| 亚洲精品www久久久| 久久免费视频观看| 精品美女久久久久久免费| 国产精品99久久久久久久久久久久| 97欧美精品一区二区三区| 欧美夜福利tv在线| 日本国产一区二区三区| 亚洲黄页网在线观看| 国产精品久久久久福利| 欧美性感美女h网站在线观看免费| 亚洲美腿欧美激情另类| 日韩欧美极品在线观看| 亚洲精品在线91| 青青青国产精品一区二区| 亚洲综合在线中文字幕| 亚洲福利视频久久| 亚洲视频在线观看网站| 国产精品老女人精品视频|