const app = getApp() const baseUrl = app.globalData.baseUrl const md5 = require('js-md5'); // page/component/orders/orders.js Page({ onLoad: function (options) { const orders = { goodsId: options.goodsId, title: options.title, price: options.price, num: options.num, image: options.image, specs: options.specs } this.setData({ orders }) console.log(this.data.orders) }, data: { address: {}, hasAddress: false, total: 0, orders: {}, config: { appid: "wx865aefa5a7115ae0", key: "d5a58d44588b42cbbe01daa5cfa4e792" }, notes: "" // {id:1,title:'新鲜芹菜 半斤',image:'/image/s5.png',num:4,price:0.01}, // {id:2,title:'素米 500g',image:'/image/s6.png',num:1,price:0.03} }, onReady() { this.getTotalPrice() }, onShow: function () { const self = this wx.getStorage({ key: "address", success(res) { self.setData({ address: res.data, hasAddress: true, }) }, }) }, handleInput(e) { this.setData({ notes: e.detail.value }); }, /** * 计算总价 */ getTotalPrice() { let orders = this.data.orders let total = 0 total += orders.num * orders.price this.setData({ total: total, }) }, timeStamp: function () { return parseInt(new Date().getTime() / 1000) + '' }, /* 随机数 */ randomString: function () { var chars = 'A2345678'; var maxPos = chars.length; var pwd = ''; for (var i = 0; i < 32; i++) { pwd += chars.charAt(Math.floor(Math.random() * maxPos)); } return pwd; }, toPay() { const self = this; const orderData = this.data.orders; wx.request({ url: baseUrl + "/user/getById", method: "GET", data: { openId: wx.getStorageSync('openid'), }, success(res) { if (res.data.data.address != null && res.data.data.address != "" && res.data.data.phone != null && res.data.data.phone != "") { // 假设用户ID暂时写死 orderData.openId = wx.getStorageSync('openid'); orderData.status = 1; orderData.notes = self.data.notes; console.log("orderData", orderData) // 生成订单并请求支付 wx.request({ url: baseUrl + "/order/addOrUpdate", // 替换为你的后端API地址 method: "POST", data: { ...orderData, }, header: { "Content-Type": "application/json", // 设置请求头 }, success(res) { if (res.statusCode === 200) { console.log(res) wx.cloud.init({ env: 'zdt2024-9g7pr48u64f887f0', //填上你的云开发环境id traceUser: true, }); const randomString = self.randomString(); const outTradeNo = res.data.data.orderCode const orderId = res.data.data.id wx.cloud.callFunction({ name: "pay", data: { nonceStr: randomString, //随机字符串,String(32) outTradeNo: outTradeNo, //商户订单号,String(32) totalFee: self.data.total * 100, //Int }, success: res => { console.log('下单结果: ', res); // 获取到预付单信息 const payment = res.result.payment wx.hideLoading(); // 唤起微信支付组件,完成支付 wx.requestPayment({ ...payment, //把payment展开 success(res) { // 支付成功回调,实现自定义的业务逻辑 console.log('唤起支付组件成功:', res); // 将订单的status改为已支付 orderData.status = 2; orderData.id = orderId; wx.request({ url: baseUrl + "/order/addOrUpdate", // 替换为你的后端API地址 method: "POST", data: { ...orderData, }, header: { "Content-Type": "application/json", // 设置请求头 }, success(res) { wx.showToast({ title: "订单支付成功", icon: "success", duration: 2000, }); wx.switchTab({ url: '/page/component/index', // 替换为你的首页路径 }); } }) }, fail(err) { // 支付失败回调 console.error('唤起支付组件失败:', err); // 将订单的status改为已关单 orderData.status = 0; orderData.id = orderId; wx.request({ url: baseUrl + "/order/addOrUpdate", // 替换为你的后端API地址 method: "POST", data: { ...orderData, }, header: { "Content-Type": "application/json", // 设置请求头 }, success(res) { wx.showToast({ title: "订单支付成功", icon: "success", duration: 2000, }); wx.switchTab({ url: '/page/component/index', // 替换为你的首页路径 }); } }) wx.showToast({ title: "支付失败", icon: "error", duration: 2000, }); } }); }, fail: err => { console.log(err) } }) } } }) } else { wx.showToast({ title: "请填写收货信息", icon: "error", duration: 2000, }); } } }) } })