项目目录结构

导入unipay插件

uni-pay - DCloud 插件市场

文件目录:

uniCloud/cloudfunctions/common/uni-pay

新建getOrderInfo云函数

在getOrderInfo/index.js中引入uni-pay

const unipay = require('unipay')

会报错: MODULE_NOT_FOUND:Cannot find module 'unipay'   
正确: const unipay = require('uni-pay')

'use strict';
// const unipay = require('unipay') // 报错: MODULE_NOT_FOUND:Cannot find module 'unipay'   
 // 引入unipay
const unipay = require('uni-pay')
exports.main = async (event, context) => {
	const unipayIns = unipay.initWeixin({
	   appId: 'xxxxxx', //小程序appid
	   mchId: 'xxxx', //微信商户号
	   key: 'xxxxxx', //商户号的API密钥
	   //pfx: fs.readFileSync('/path/to/your/pfxfile'), // p12文件路径,使用微信退款时需要,需要注意的是阿里云目前不支持以相对路径读取文件,请使用绝对路径的形式
	})
   //event为客户端上传的参数
   let orderInfo = await unipayIns.getOrderInfo({
      openid: event.openid, //这个是客户端上传的用户的openid
      // subject: event.name, // 订单名称微信支付时不可填写此项
      body: '服务费',
      outTradeNo: event.suiji, //给他个随机号让他可以第二次发起支付
      totalFee: event.pric, // 金额,单位元,在上传过来的时候就已经*100了
      // 支付结果通知地址,没有该参数或者为空会报错,随便给了一个测试网址
      notifyUrl: 'https://xxxxx',
      // attach: event.out_trade, //备注,订单号或 长者id 在下一步通知中判断长度来确定
   })
   return { orderInfo }
};

在客户端编写支付请求

<button @click="weixinPay">支付</button>

// 微信支付
weixinPay() {
    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: "xxxxxxxxxx", // 你的小程序的APPID 
                secret: "xxxxxxxxxxxx",       //你的小程序的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,
                        // name: that.order.name,
                        // out_trade: that.order.out_trade, // 订单号
                        out_trade: 123456, // 订单号
                        suiji: Math.floor(Math.random() * 100000000),
                        pric: 1, // 单位分
                    }
                    }).then(odr => {
                        console.log('OrderInfo:', odr)
                        uni.hideLoading(); //隐藏loding...
                        uni.requestPayment({ // 调用支付api
                        provider: 'weixin',
                        ...odr.result.orderInfo,  
                        success() {
                            uni.showModal({
                                title: '支付成功',
                                content: '请和顾问联系执行订单即可!'
                            })
                        },
                        fail() {}
                    })
                })
            }  
        }); 
    },
    fail(err) {
        reject(new Error('微信登录失败'))
    }
})
// 支付结束
			
}

参考:

uniapp使用unipay云函数完成微信支付!--好空间网络! (jspkongjian.com)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐