创建支付订单
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/0a7615503f783146d048efb0c5b2950d?showdoc=.jpg" alt="" /></p>
<ol>
<li>
<p>首先用户点击订单页面的付款按钮</p>
</li>
<li>
<p>小程序向商户系统发出请求,上传令牌和商品订单ID,商户系统经过验证之后,把商品订单流水号、APPID、密钥等信息,提交给支付宝平台,请求支付宝平台创建支付订单。</p>
</li>
<li>
<p>支付宝平台验证过数据之后,就会生成支付订单</p>
</li>
<li>
<p>并且把订单信息返回给商户系统</p>
</li>
<li>商户系统只要把支付订单的ID返回给小程序即可,小程序发起支付请求的时候,只需要向支付宝平台提交支付订单ID即可,根本不需要随机字符串、时间戳、数字签名等参数。所以商户系统只需要向小程序返回支付订单的ID,程序代码一下子变得简单了。</li>
</ol>
<h3>创建PayOrderForm.java</h3>
<pre><code class="language-java">@Data
@ApiModel(value = "订单付款的表单")
public class PayOrderForm {
@ApiModelProperty(value = "订单ID")
@Min(1)
private Integer orderId;
}</code></pre>
<h3>编写ZfbController中的创建支付订单方法</h3>
<pre><code class="language-java">@Login
@PostMapping("/microAppPayOrder")
@ApiOperation("小程序付款")
public R microAppPayOrder(@RequestBody PayOrderForm form, @RequestHeader HashMap header) {
ValidatorUtils.validateEntity(form);
String token = header.get("token").toString();
Long userId = Long.parseLong(jwtUtils.getClaimByToken(token).getSubject());
int orderId = form.getOrderId();
UserEntity user = new UserEntity();
user.setUserId(userId);
QueryWrapper wrapper = new QueryWrapper(user);
long count = userService.count(wrapper);
if (count == 0) {
return R.error("用户不存在");
}
String openId = userService.getOne(wrapper).getOpenId();
OrderEntity order = new OrderEntity();
order.setUserId(userId.intValue());
order.setId(orderId);
order.setStatus(1);
wrapper = new QueryWrapper(order);
count = orderService.count(wrapper);
if (count == 0) {
return R.error("不是有效的订单");
}
//验证购物券是否有效
//验证团购活动是否有效
order = new OrderEntity();
order.setId(orderId);
wrapper = new QueryWrapper(order);
order = orderService.getOne(wrapper);
String amount = order.getAmount() + "";
try {
AlipayClient client = new DefaultAlipayClient(
gateway,
microApp_appId,
microApp_privateKey,
"json",
"UTF-8",
microApp_publicKey,
"RSA2"
);
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
request.setBizContent("{" +
"\"out_trade_no\":\"" + order.getCode() + "\"," +
"\"total_amount\":" + amount + "," +
"\"subject\":\"订单备注\"," +
"\"buyer_id\":\"" + openId + "\"," +
"\"notify_url\":\"http://www.demo.com/test\"" +
"}");
AlipayTradeCreateResponse response = client.execute(request);
if (response.isSuccess()) {
String prepayId = response.getTradeNo();
order.setPrepayId(prepayId);
order.setPaymentType(2);
UpdateWrapper updateWrapper = new UpdateWrapper();
updateWrapper.eq("id", order.getId());
orderService.update(order, updateWrapper);
return R.ok().put("prepayId", prepayId);
} else {
return R.error("支付订单创建失败");
}
} catch (Exception e) {
e.printStackTrace();
return R.error("支付宝支付模块故障");
}
}</code></pre>
<h3>编写order.vue页面</h3>
<pre><code class="language-javascript">uni.request({
url: that.url.zfb.microAppPayOrder,
method: "POST",
header: {
"token": uni.getStorageSync("token")
},
data: {
"orderId": id
},
success: function(resp) {
let prepayId = resp.data.prepayId
……
}
)</code></pre>