新零售支付全家桶


创建支付订单

  1. 首先用户点击订单页面的付款按钮

  2. 小程序向商户系统发出请求,上传令牌和商品订单ID,商户系统经过验证之后,把商品订单流水号、APPID、密钥等信息,提交给支付宝平台,请求支付宝平台创建支付订单。

  3. 支付宝平台验证过数据之后,就会生成支付订单

  4. 并且把订单信息返回给商户系统

  5. 商户系统只要把支付订单的ID返回给小程序即可,小程序发起支付请求的时候,只需要向支付宝平台提交支付订单ID即可,根本不需要随机字符串、时间戳、数字签名等参数。所以商户系统只需要向小程序返回支付订单的ID,程序代码一下子变得简单了。

创建PayOrderForm.java

@Data
@ApiModel(value = "订单付款的表单")
public class PayOrderForm {
    @ApiModelProperty(value = "订单ID")
    @Min(1)
    private Integer orderId;
}

编写ZfbController中的创建支付订单方法

@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("支付宝支付模块故障");
    }

}

编写order.vue页面

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
        ……
    }
)

页面列表

ITEM_HTML