1. 程式人生 > 其它 >學習筆記【23種設計模式-第四節:Prototype原型模式 -克隆羊、深淺拷貝】

學習筆記【23種設計模式-第四節:Prototype原型模式 -克隆羊、深淺拷貝】

支付流程如圖:

  

一.建立訂單

  1.在建立訂單時要先獲取使用者登入成功後的token值

    1.1獲取使用者的token值的必要引數

      1.1(1)給支付繫結一個點選事件

       以下欄位主要用作後臺伺服器生成使用者token所有,無特殊用意

        encryptedData(執行小程式獲取使用者資訊得到)

        rawData(執行小程式獲取使用者資訊得到)

        iv(執行小程式獲取使用者資訊得到)

        signature(執行小程式獲取使用者資訊得到)

        code(執行小程式登入後獲取)

建立訂單頁

        handleOrderPay(){

            
//判斷快取 中有沒有token             const token = wx.getStorageSync("token");             //判斷             if(!token){               wx.navigateTo({                 url:'/pages/auth/index' //跳轉到授權頁面 ,進行token獲取               })               return;             }           }  

 授權頁面

      使用微信小程式button元件的開放能力open-type拿到使用者資訊

     

      再結合button的bindgetuserinfo屬性

      

HTML
          <button open-type="getUserInfo"  bindgetuserinfo="handleGetUserInfo(起個名字)">
          獲取授權
         </button>
await handleGetUserInfo(e){   //通過點選這個事件獲取到微信返回的使用者資訊
   console.log(e)
  //獲取使用者資訊
  const {encrypteData,rawData,iv,signature} = e.detail;
  
//獲取小程式登入成功後的code值   wx.login({     timeout:10000,     success:(result) =>{       const { code } = result;     }   })   //在獲取完請求token所必要的引數後,encryptedData,rawData,iv,signature,code,把值統一放到一個變數裡中進行傳參   const loginParams ={ encryptedData,rawData,iv,signature,code }   //傳送請求,獲取使用者token   const { token }= await request({url:"請求地址"},data:loginParams,method:"post"}) //封裝了後臺請求,不解請看https://www.cnblogs.com/whenwei123/p/14133820.html   console.log(token) //列印可檢視token ,如無企業賬號,是無法成功的   //把token存入快取中, 同時跳轉回上一個建立訂單頁面   wx.setStorageSync('token',token);   wx.navigateBack({     delta:1 //1表示返回上一層 2兩層   });   }  }) 

建立訂單頁

        async handleOrderPay(){

            //判斷快取 中有沒有token
            const token  = wx.getStorageSync("token");
            //判斷
            if(!token){

              wx.navigateTo({

                url:'/pages/auth/index' //跳轉到授權頁面 ,進行token獲取
              })
              return;
            }

          }  

          //建立訂單,獲取訂單編號
          //準備建立訂單的請求的引數,根據後臺給的文件進行傳參

          //準備 請求頭引數
          const header ={Authorization:token}; //獲取token,因為在上面已經獲取過快取中的token了
          //準備 請求體引數
          const order_price = this.data.totalPrice; //訂單價格
          const consignee_addr =this.data.address.all; //訂單收貨地址

          const cart = this.data.cart;
          let goods = [];
          //迴圈遍歷陣列放到新陣列
          cart.forEach(v => goods.push({
            goods_id:v.goods_id, //商品ID
            goods_number:v.num,  //購買數量
            goods_price:v.goods_price //單價
           }))
          const orderParams ={order_price ,consignee_addr,goods }
          //4 準備傳送請求, 建立 訂單 獲取訂單編號
          const { order_number }= await request({url:"請求地址",method:"POST",data:orderParams ,header:header})
          console.log(order_number ) //列印檢視訂單編號

準備預支付,在建立訂單頁js下繼續寫

          // 5 獲取pay,準備預支付

          const res = await request({url:請求地址},method:'請求方式',header,data:{order_number}) //兩個引數一個是header(token),一個是order_number(訂單編號)

          console.log(res)  //列印可看到一個叫pay的引數
            
            //發起微信支付 
            //此時使用微信內建的支付的程式碼wx.requestPayment,可以發現返回的引數正好可以和微信內的支付程式碼一樣,
              
          //把資料一一對應填進去
          
          //查詢後臺 訂單狀態,請求後臺
          const res = await request({url:"請求後臺的地址"},method:"請求方式",
header,data:{order_number}) //兩個引數一個是header(token),一個是order_number(訂單編號)
          console.log(res)
          wx.showToast({
            title:"支付成功"
          })
          
          視訊瞭解可通過此處學習瞭解:https://www.bilibili.com/video/BV1nE41117BQ?p=98