小程序支付流程详解

一、小程序需要是企业级开发,并且将开发者加入开发者白名单
二、支付实现
1、获取用户信息

<button type="primary" plain open-type="getUserInfo" bindgetuserinfo="handleGetUserInfo" >
  获取授权
</button>
`handleGetUserInfo(e) {
	 // 1 获取用户信息
    const { encryptedData, rawData, iv, signature } = e.detail;
}

2、调用wx.login()获取小程序登录成功后的code

export const login=()=>{
  return new Promise((resolve,reject)=>{
    wx.login({
      timeout:10000,
      success: (result) => {
        resolve(result);
      },
      fail: (err) => {
        reject(err);
      }
    });
  })
}
const { code } = await login();

3、给后台发送请求,获取用户token,并存入到本地存储

// 定义公共的url
  const baseUrl="https://api.zbztb.cn/api/public/v1";
  return new Promise((resolve,reject)=>{
    wx.request({
     ...params,
     header:header,
     url:baseUrl+params.url,
     success:(result)=>{
       resolve(result.data.message);
     },
     fail:(err)=>{
       reject(err);
     },
     complete:()=>{
      ajaxTimes--;
      if(ajaxTimes===0){
        //  关闭正在等待的图标
        wx.hideLoading();
      }
     }
    });
  })
  const {token}=await request({url:"/users/wxlogin",data:loginParams,method:"post"});
  wx.setStorageSync("token", token);

4、创建订单,并将token值绑定到请求头中,交互后获取订单编号

 // 3.1 准备 请求头参数
      // const header = { Authorization: token };
      // 3.2 准备 请求体参数
      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,
        goods_number: v.num,
        goods_price: v.goods_price
      }))
      const orderParams = { order_price, consignee_addr, goods };
      // 4 准备发送请求 创建订单 获取订单编号
      const { order_number } = await request({ url: "/my/orders/create", method: "POST", data: orderParams ,header:header});

5、使用订单编号发起预支付接口,拿到pay

const { pay } = await request({ url: "/my/orders/req_unifiedorder", method: "POST", data: { order_number },header:header });

6、 发起微信支付

export const requestPayment=(pay)=>{
  return new Promise((resolve,reject)=>{
   wx.requestPayment({
      ...pay,
     success: (result) => {
      resolve(result)
     },
     fail: (err) => {
       reject(err);
     }
   });
     
  })
     await requestPayment(pay);

7、查询后台 订单状态

 const res = await request({ url: "/my/orders/chkOrder", method: "POST", data: { order_number } ,header:header});
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值