### 小程序接入购物订单功能实现步骤
#### 一、基础准备
1. **注册微信商户号**
- 登录[微信支付商户平台](https://pay.weixin.qq.com)完成注册
- 获取商户ID(`mch_id`)和API密钥(`API Key`)
2. **小程序后台配置**
- 进入微信公众平台 → 开发 → 开发设置 → 服务器域名
- 添加支付相关域名:`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: '支付成功' })
}
})
}
})
#### 三、后端开发(服务端)
1. **订单接口设计**
python
# Flask 示例(Python)
@app.route('/api/create_order', methods=['POST'])
def create_order():
# 1. 验证用户身份
# 2. 生成唯一订单号(建议格式:年月日+随机数)
# 3. 计算总金额(需校验前端传递价格)
# 4. 调用微信统一下单接口
# 5. 返回 prepay_id 给前端
2. **微信支付签名生成**
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 '''
'''
#### 六、注意事项
1. **安全防护**
- 价格校验:需在后端重新计算金额
- 防重复提交:使用唯一订单号+幂等性设计
- 敏感数据加密:支付参数需HTTPS传输
2. **用户体验优化**
- 订单状态实时更新(WebSocket)
- 支付超时自动取消(定时任务)
- 订单删除改为逻辑删除
3. **微信规范要求**
- 不得诱导用户分享
- 需明确展示商品详情
- 必须使用官方支付组件