前端需要做的事情:
- 生成平台订单:前端调用接口,向后端传递需要购买的商品信息、收货人信息,[后端生成平台订单,返回订单编号]
- 获取预付单信息:将订单编号发送给后端后, [后端向微信服务器获取预付单信息,后端会将微信服务器返回的预付单信息进行加密,然后将加密以后的预付单信息返回给前端]
- 发起微信支付:前端调用 wx.requestPayment() 发起微信支付
- 查询支付状态:调用接口查询支付状态
//提交订单
async subMitorder() {
const {
buyName,
buyPhone,
deliveryDate,
blessing,
orderAddress,
orderInfo
} = this.data;
const parmas = {
buyName,
buyPhone,
cartList: orderInfo.cartVoList,
deliveryDate,
remarks: blessing,
userAddressId: orderAddress.id
}
//对参数进行验证
const {
valid
} = await this.validatorPerson(parmas);
if (!valid) return;
//调用接口创建平台订单
const {
code,
data
} = await reqSubmitOrder(parmas);
if (code === 200) {
//在平台创建成功以后,需要将服务器后台返回的订单编号挂载到页面实例上
this.orderNo = data;
//获取预付单信息
this.advancePay();
}
},
async advancePay() {
// 获取预付单信息、支付参数
try {
const {
code,
data
} = await reqPreBuyInfo(this.orderNo);
if (code == 200) {
//调用微信支付接口
const payInfo = await wx.requestPayment(data);
// 获取支付结果
if (payInfo.errMsg === 'requestPayment:ok') {
// 查询订单的支付状态
const payStatus = await reqPayStatus(this.orderNo)
if (payStatus.code === 200) {
wx.redirectTo({
url: '/modules/orderPayModule/pages/order/list/list',
success: () => {
wx.toast({
title: '支付成功',
icon: 'success'
})
}
})
}
}
}
} catch (error) {
wx.toast({
title: '支付失败,请联系客服',
incon: 'error'
})
}
},
//对收货人,订购人请求参数进行验证
validatorPerson(params) {
// 验证订购人,是否只包含大小写字母、数字和中文字符
const nameRegExp = '^[a-zA-Z\\d\\u4e00-\\u9fa5]+$'
// 验证订购人手机号,是否符合中国大陆手机号码的格式
const phoneReg = '^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$'
//创建验证规则
const rules = {
userAddressId: {
required: true,
message: '请输入收货地址'
},
buyName: [{
required: true,
message: '请输入订购人姓名'
},
{
pattern: nameRegExp,
message: '订购人姓名不合法'
}
],
buyPhone: [{
required: true,
message: '请输入订购人手机号'
},
{
pattern: phoneReg,
message: '订购人手机号不合法'
}
],
deliveryDate: {
required: true,
message: '请选择送达日期'
}
}
//传入验证规则,进制实例化
const validator = new Schema(rules);
//调用实例方法对请求参数进行验证 注意: 我们希望将验证结果通过promise的形式返回给函数的调用者
return new Promise((resolve) => {
validator.validate(params, (errors) => {
if (errors) {
//验证失败 进行提示
wx.toast({
title: errors[0].message
})
//如果属性值是false,说明验证失败
resolve({
valid: false
})
} else {
//如果属性值是true,说明验证成功
resolve({
valid: true
})
}
})
})
},