小程序接入购物订单功能实现步骤
一、基础准备
注册微信商户号
- 登录微信支付商户平台完成注册
- 获取商户ID(
mch_id
)和API密钥(API Key
)
小程序后台配置
- 进入微信公众平台 → 开发 → 开发设置 → 服务器域名
- 添加支付相关域名:
https://api.mch.weixin.qq.com
二、前端开发(小程序端)
javascript // 订单确认页示例代码 Page({ data: { goodsList: [], // 商品列表 totalPrice: 0 // 总金额 },
// 提交订单 createOrder: function() { wx.request({ url: 'https://yourdomain.com/api/create_order', method: 'POST', data: { goods: this.data.goodsList, openid: getApp().globalData.openid }, success: (res) => { this.payment(res.data.prepay_id) } }) },
// 发起支付 payment: function(prepayId) { wx.requestPayment({ timeStamp: String(Date.now()), nonceStr: '随机字符串', package: 'prepay_id=' + prepayId, signType: 'MD5', paySign: '签名', success: (res) => { wx.showToast({ title: '支付成功' }) } }) } })
三、后端开发(服务端)
订单接口设计 python
Flask 示例(Python)
@app.route('/api/create_order', methods=['POST']) def create_order():
1. 验证用户身份
2. 生成唯一订单号(建议格式:年月日+随机数)
3. 计算总金额(需校验前端传递价格)
4. 调用微信统一下单接口
5. 返回 prepay_id 给前端
微信支付签名生成 python def generate_sign(params, api_key): params = sorted(params.items()) stringA = '&'.join([f"{k}={v}" for k, v in params]) stringSignTemp = f"{stringA}&key={api_key}" return hashlib.md5(stringSignTemp.encode()).hexdigest().upper()
四、数据库设计
sql CREATE TABLE orders ( order_id VARCHAR(32) PRIMARY KEY, -- 订单号 user_id INT NOT NULL, -- 用户ID total_fee INT NOT NULL, -- 总金额(分) status TINYINT DEFAULT 0, -- 0未支付 1已支付 2已取消 create_time DATETIME DEFAULT NOW() );
CREATE TABLE order_items ( id INT AUTO_INCREMENT PRIMARY KEY, order_id VARCHAR(32), goods_id INT, quantity INT, price INT );
五、支付回调处理
python @app.route('/pay/notify', methods=['POST']) def payment_notify(): # 1. 验证签名 # 2. 更新订单状态 # 3. 返回处理结果给微信 return '''
'''
六、注意事项
安全防护
- 价格校验:需在后端重新计算金额
- 防重复提交:使用唯一订单号+幂等性设计
- 敏感数据加密:支付参数需HTTPS传输
用户体验优化
- 订单状态实时更新(WebSocket)
- 支付超时自动取消(定时任务)
- 订单删除改为逻辑删除
微信规范要求
- 不得诱导用户分享
- 需明确展示商品详情
- 必须使用官方支付组件