第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

【九月打卡】第14天 Java支付全家桶 企業(yè)級(jí)各類支付手段一站式解決方案(6-2)

標(biāo)簽:
活動(dòng)

课程名称:Java支付全家桶 企业级各类支付手段一站式解决方案

主讲老师:神思者

课程内容:

今天课程学习的主要知识点内容包括:
微信官方的付款码规则、收款码付款的表单请求表单参数的设计、编写收款码付款支付的后端接口方法 、使用 Swagger 接口对收款码付款支付进行测试、收款码付款支付失败情况的处理。

课程收获:

1、微信官方的付款码规则:
微信用户付款码条形码规则:18 位的数字,以 10、11、12、13、14、15 开头;

2、收款码付款的表单请求表单参数的设计
编写 ScanCodePayOrderForm.java 类,其主要的核心代码如下:

@Data
@ApiModel(value = "支付订单表单")
public class ScanCodeOrderForm {

    @ApiModelProperty(value = "订单id")
    @NotNull(message = "订单id不能为空")
    private Long orderId;

    @NotBlank(message = "付款吗不能为空")
    @Pattern(regexp = "^1[0-5][0-9]{16}$", message = "付款吗不符合正则表达式")
    private String authCode;

}

3、编写收款码付款支付的后端接口方法
在后端的 controller 层,进行后端扫码支付接口方法的编写,注意这里需要调用的不是创建订单的 unifiedOrder 接口,而是 microPay 接口,因为收款码付款支付的创建订单和支付的接口是一体的。其主要核心代码如下:

@Login
@PostMapping("/scanCodePayOrder")
@ApiModelProperty("收款码付款支付")
public R scanCodePayOrder(@RequestBody ScanCodeOrderForm form, @RequestHeader HashMap header) {
    ValidatorUtils.validateEntity(form);
    String token = header.get("token").toString();
    long userId = Convert.toLong(jwtUtils.getClaimByToken(token).getSubject());
    long orderId = form.getOrderId();
    OrderEntity order = orderService.getOne(
            Wrappers.<OrderEntity>lambdaQuery()
                    .eq(OrderEntity::getId, orderId)
                    .eq(OrderEntity::getUserId, userId)
                    .eq(OrderEntity::getStatus, 1)
    );
    if (null == order) {
        R.error("不是有效订单");
    }
    String amount = Convert.toStr(order.getAmount().multiply(new BigDecimal(100)).intValue());
    // 其他校验
    // 验证购物券是否有效
    // 验证团购活动是否有效
    // 向微信平台发送请求,创建支付订单
    try {
        String code = IdUtil.fastSimpleUUID();
        code = "5b88863eec5f4a3ba09653f00dd08bc4";
        System.out.println(code);
        order.setCode(code);
        orderService.updateById(order);
        WXPay wxPay = new WXPay(myWXPayConfig);
        Map<String, String> map = new HashMap();
        map.put("out_trade_no", code);
        map.put("total_fee", amount);
        map.put("attach", "附加数据-xx分店");
        map.put("body", "订单备注-扫码支付测试");
        map.put("nonce_str", WXPayUtil.generateNonceStr());
        map.put("spbill_create_ip", "127.0.0.1");
        map.put("auth_code", form.getAuthCode());
        Map<String, String> result = wxPay.microPay(map);
        String returnCode = result.get("return_code");
        String resultCode = result.get("result_code");
        if ("SUCCESS".equals(returnCode) && "SUCCESS".equals(resultCode)) {
            String prepayId = result.get("transaction_id");
            order.setCode(code);
            order.setPrepayId(prepayId);
            order.setPaymentType(2);
            order.setStatus(2);
            orderService.updateById(order);
            return R.ok("微信付款成功");
        } else {
            return R.error("微信支付模块故障");
        }
    } catch (Exception e) {
        e.printStackTrace();
        return R.error("微信支付模块故障");
    }
}

4、收款码付款支付失败情况的处理
使用 Swagger 接口对收款码付款支付进行测试,这里有一个重要的注意点是,如果客户在同一段时间内,使用付款码多次进行支付,那么收款码付款支付时候,微信平台会要求客户输入支付密码,在等待客户输入支付密码的过程中,微信侧是不会出于阻塞状态的,而是会直接放回支付失败给商户平台。
遇到这种情况时,在客户输入密码完成支付后,可以再次对同一个订单(code一致)发起收款码付款支付请求,此时微信发现这订单已经支付成功,会返回支付成功的结果,不会重复扣款(见下图2和图3,图2失败,图3成功)。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消