日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

由小程序前端虚拟数据发起的订单(形成预支付订单返回prepay_id)-微信支付-支付成功这么一个过程

發布時間:2023/12/14 HTML 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 由小程序前端虚拟数据发起的订单(形成预支付订单返回prepay_id)-微信支付-支付成功这么一个过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由小程序前端虛擬數據發起的訂單(形成預支付訂單返回prepay_id)-微信支付-支付成功這么一個過程。沒有后臺操作,全部是前端操作,只是為了能走通小程序支付流程,菜鳥的嘗試,記錄一下,(真正做支付,涉及到錢還是要后端支持的,畢竟全部前端操作安全性不高)如果能后臺支持,很多步驟是不需要的

不過由于我還不會讀取文件去pem文件里面獲取秘鑰,所以需要手動輸入證書秘鑰(需要PEM RSA私鑰)

wxml頁面

<text>下訂單(形成預支付訂單返回prepay_id)-支付-支付成功這么一個過程</text> <view class="container"><form bindsubmit="bindFormSubmit"><!-- textarea 設置maxlength="-1"是為了不限制長度 --><textarea placeholder="填寫秘鑰" maxlength="-1" name="textarea" value='' style="border: 1px solid #000;"></textarea><button type="warn" form-type="submit">下單</button></form> </view>

?js頁面

var jsrsasign = require('../../utils/jsrsasign-all-min.js'); //引用js Page({data: {appid: '',mchid: '',description: '',out_trade_no: '',time_expire: '',attach: '',notify_url: '',goods_tag: '',amount_total: '',amount_currency: '',payer: '',//支付證書秘鑰textarea_text:'',},onLoad: function (options) {},//下訂單bindFormSubmit: function (e) {var that = this;//簽名構造//時間戳var timestamp = Date.parse(new Date());timestamp = timestamp / 1000;//隨機數var t = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678",a = t.length,n = "";for (var i = 0; i < 32; i++) n += t.charAt(Math.floor(Math.random() * a));var data_j = {//具體參數要求看文檔appid: 'wxXXXX', //小程序appidmchid: 'XXXX', //商戶號description: '啦啦啦啦',out_trade_no: '12177525013014070332344368024',//訂單號不能重復time_expire: '2020-12-28T10:34:56+08:00',attach: '自定義說明:購買章節',notify_url: 'https://www.baidu.com',//通知URL必須為直接可訪問的URL,我隨便寫了個goods_tag: '',amount: {total: 2,//以分為單位currency: 'CNY',},payer: {openid: 'o8DAB5SX8oKjvrxCXkL7vUYjheHk',//通過wx.login去獲取臨時code,然后去兌換用戶的openid//調用auth.code2Session ,換取 用戶唯一標識 OpenID 和 會話密鑰 session_key。//請求地址為GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code}};var jsonstr = JSON.stringify(data_j) //將值轉換為 JSON 字符串。//拼接成下單需要的簽名字符串,header里面要用到var Signature_str = 'POST\n/v3/pay/transactions/jsapi\n' + timestamp + '\n' + n + '\n' + jsonstr + '\n';//將證書和簽名串一起加密成sha256,再加密64位var rsa = new jsrsasign.RSAKey();rsa.readPrivateKeyFromPEMString(e.detail.value.textarea);var hSig = rsa.sign(Signature_str, 'sha256');var sign = jsrsasign.hextob64(hSig);that.setData({textarea_text:e.detail.value.textarea, //支付時候的簽名也需要用到證書,就先更新一下值})wx.request({method: 'POST',url: 'https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi',data: data_j,header: { //商戶API證書序列號serial_no'Authorization': 'WECHATPAY2-SHA256-RSA2048 mchid="1509188351",nonce_str="' + n + '",signature="' + sign + '",timestamp="' + timestamp + '",serial_no="31AA736A2BE6D6214B2E989364C7D7CBFFDD86A3"',},success: function (res) {console.log(res)that.payment(res.data.prepay_id)},fail: function (error) {console.log(error)},complete: function () {that.setData({loading: false});}});},payment:function(e){var that = this;//簽名構造//時間戳var timestamp = Date.parse(new Date());timestamp = timestamp / 1000;//隨機數var t = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678",a = t.length,n = "";for (var i = 0; i < 32; i++) n += t.charAt(Math.floor(Math.random() * a));//拼接成支付需要的簽名字符串,appid\ntimestamp\n隨機數\nprepay_id=XXX\n, prepay_id是剛才預支付訂單返回的var Signature_str = 'wx147a2183a6460527\n' + timestamp + '\n' + n + '\nprepay_id=' + e + '\n';//將證書和簽名串一起加密成sha256,再加密64位var rsa = new jsrsasign.RSAKey();rsa.readPrivateKeyFromPEMString(that.data.textarea_text);var hSig = rsa.sign(Signature_str, 'sha256');var sign = jsrsasign.hextob64(hSig);wx.requestPayment({timeStamp: timestamp+'', //記住,這邊的timeStamp一定要是字符串類型的,不然會報錯nonceStr: n,package: 'prepay_id=' + e,signType: 'RSA',paySign: sign,success: function (event) {console.log(event);wx.showToast({title: '支付成功',icon: 'success',duration: 2000});},fail: function (error) {wx.showToast({title: '支付失敗',icon: 'success',duration: 2000});console.log(error)},complete: function () {console.log("pay complete")}});}, })

需要引入的jsrsasign-all-min.js

好像不能插入文件,上傳在資源那邊啦

emm~,其中前端簽名的生成和下單的時候需要的header這兩個地方走了不少彎路

?

?

總結

以上是生活随笔為你收集整理的由小程序前端虚拟数据发起的订单(形成预支付订单返回prepay_id)-微信支付-支付成功这么一个过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。