麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

微信小程序支付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('獲取用戶登錄態失敗!' + 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武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 午夜精品网站 | 国产18成人免费视频 | 羞羞答答视频 | 亚洲精品久久久久久久久久 | 精品国产一区二区三区四区阿崩 | 男女无套免费视频 | 欧美日韩中文字幕在线 | 黄 色 免费网 站 成 人 | 在线亚洲欧美 | 极品五月天 | 操碰视频在线观看 | 91专区在线观看 | 欧美一级不卡视频 | 黄色视频a级毛片 | 一区二区三区在线观看免费 | 成人电影毛片 | 精品国产一区二区三区四区在线 | 久久精品99久久久久久2456 | 一级国产精品一级国产精品片 | 中文字幕亚洲一区二区三区 | 一级大片在线观看 | av在线免费看片 | 精品久久久久久综合日本 | 国产午夜精品一区二区三区在线观看 | 天天看天天摸天天操 | 婷婷亚洲一区二区三区 | 激情小说另类 | 欧美日韩后 | 日本娇小videos高潮 | 鲁久久 | 国产一级淫片在线观看 | 午夜视频福利 | 一级在线视频 | 色七七网站 | 亚洲精品久久久久久下一站 | 91av在线免费播放 | 国产精品久久久在线观看 | 国产一级免费av | av在线不卡免费 | 中文字幕亚洲一区二区三区 | 色悠悠久久久久 |