新零售支付全家桶


创建支付订单

<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>

页面列表

ITEM_HTML