紫霖XL 2022-10-23 23:30 采纳率: 33.3%
浏览 173

请问uniapp小程序使用unicloud微信支付成功后怎么修改订单状态

使用的是uniapp+unicloud+uni-pay模块。请问微信支付成功后怎么修改订单状态,把数据库中的订单改成 “已支付”。

如果直接写在支付api的回调里=>

  • [假如用户支付成功没有点完成 ]
  • [用户直接返回手机桌面 ]
  • [用户支付成功没点完成,直接息屏]
  • [或者是直接关闭小程序 ]
  • [甚至恰好遇到断网 ]

那不就收不到回调,达不到绝对更改订单状态的效果。

所以想问下如何解决这个问题。

   pay(id) {
        let golist = this.goodlist[0];
        var that = this
        // 1.传递weixin 获取微信的code
        uni.login({
          provider: 'weixin',
          success(code) {
            console.log('code:', code.code) // 获得code
            //2:获得微信openid
            uni.request({
              url: 'https://api.weixin.qq.com/sns/jscode2session',
              method: 'GET',
              data: {
                appid: "wx*************965", // 你的小程序的APPID 
                secret: "6f1aa4f***********************df89", //你的小程序的secret, 
                js_code: code.code //wx.login 登录成功后的code  
              },
              success: (cts) => {
                console.log(cts);
                // cts.data.openid 拿到openid
                //3:调用云函数 统一下单
                uniCloud.callFunction({
                  name: 'getOrderInfo',
                  data: { // 传递订单的一些基本信息
                    openid: cts.data.openid,
                    goodname: golist.name,
                    out_trade: id, // 订单号
                    outTradeNo: id,
                    price: golist.price, // 单位分
                  }
                }).then(odr => {
                  console.log('OrderInfo:', odr)
                  uni.requestPayment({ // 调用支付api
                    provider: 'weixin',
                    ...odr.result.orderInfo,
                    success() {
                      console.log('支付成功')
                      // uni.showModal({
                      //   title: '支付成功',
                      //   content: '感谢您的使用!'
                      // })
                    },
                    fail() {
                      console.log('支付失败或取消支付')
                    }
                  })
                })
              }
            });
          },
          fail(err) {
            reject(new Error('微信登录失败'))
          }
        })
      }
   

'use strict';
const unipay = require('uni-pay')
exports.main = async (event, context) => {
    const unipayIns = unipay.initWeixin({
       appId: 'wx*************65', //小程序appid
       mchId: '16*******24', //微信商户号
       key: '4ga*********************l5er', 
        })
    let orderInfo = await unipayIns.getOrderInfo({
      openid: event.openid, 
      // subject: event.name, // 订单名称微信支付时不可填写此项
      body: event.goodname,
      outTradeNo: event.outTradeNo, 
      totalFee: event.price,
      notifyUrl: 'https://uniapp.dcloud.net.cn/uniCloud/uni-id-summary.html#',
   })
   return { orderInfo }
};


  • 写回答

3条回答 默认 最新

  • 紫霖XL 2022-10-23 23:53
    关注

    大神们回复尽量详细一点哈,本人小白,思路不清晰 QAQ

    评论

报告相同问题?

问题事件

  • 创建了问题 10月23日

悬赏问题

  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备