电商收付通系列⑩,合单下单之扫码支付

299 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 28 天,点击查看活动详情

大家好,我是小悟

1、介绍

Native支付是指商户系统按微信支付协议调用接口生成code_url,在把code_url生成支付二维码,用户再用微信“扫一扫”完成支付的模式。

Native支付常用于PC网站、实体店单品或订单、媒体广告支付等场景,用户扫描商户展示在各种场景的二维码进行支付。

商户根据微信支付的规则,为不同商品生成不同的二维码,展示在各种场景,用于用户扫描购买。

image.png

用户确认支付,输入支付密码,支付完成后会提示用户支付成功,商户后台得到支付成功的通知,然后进行发货处理。

image.png

image.png

2、代码实现

public static JSONObject payNative(PayParam param) {
        String requestParam = JSON.toJSONString(param);
        logger.info("payNative param:{}",requestParam);
        HttpResponse response = HttpUtils.v3HttpExecute("POST", TransactionsUrl.NATIVE,
                "自己系统的应用名称","服务商商户号","商户API证书序列号","平台证书序列号",requestParam,"商户API证书位置.pem",null);
        logger.info("payNative jsonObject:{}",response);
        return null;
    }
public static void main(String[] args) {
PayParam payParam = new PayParam();
payParam.setCombine_appid("");
payParam.setCombine_mchid("");
payParam.setCombine_out_trade_no("out_trade_no1_"+System.currentTimeMillis());
SceneInfo sceneInfo1 = new SceneInfo();
sceneInfo1.setDevice_id("POS1:12");
sceneInfo1.setPayer_client_ip("120.36.255.14");
payParam.setScene_info(sceneInfo1);
PaySubOrder paySubOrder = new PaySubOrder();
paySubOrder.setMchid("");
paySubOrder.setAttach("123&456");
Amount amount1 = new Amount();
amount1.setTotal_amount(2);
amount1.setCurrency("CNY");
paySubOrder.setAmount(amount1);
paySubOrder.setOut_trade_no("out_trade_no2_"+System.currentTimeMillis() + "");
paySubOrder.setSub_mchid("");
//商品简单描述。需传入应用市场上的APP名字-实际商品名称,例如:天天爱消除-游戏充值。
//示例值:腾讯充值中心-QQ会员充值
paySubOrder.setDescription("腾讯充值中心-QQ会员充值");
SettleInfo settleInfo = new SettleInfo();
settleInfo.setProfit_sharing(true);
paySubOrder.setSettle_info(settleInfo);
List<PaySubOrder> paySubOrders = new ArrayList<>();
paySubOrders.add(paySubOrder);
payParam.setSub_orders(paySubOrders);
payParam.setNotify_url("https://yourapp.com/notify");
payNative(payParam);
}

image.png

3、结果

{"code_url":"weixin://wxpay/bizpayurl/up?pr=juMoKaK&groupid=00"}

该模式链接较短,生成的二维码打印到结账小票上的识别率较高。二维码的有效期是2小时。微信支付已经不支持通过长按识别二维码的方式或通过相册识别二维码的方式完成支付。

4、转换二维码

image.png

image.png

image.png

image.png

用户支付成功后,微信支付会将支付结果通知给商户,通知的地址就是在调用接口时传入的notify_url的值。通知URL必须为直接可访问的URL,不允许携带查询串,要求必须为https地址。

当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知、调用支付接口后,返回系统错误或未知交易状态情况、调用付款码支付API,返回USERPAYING的状态、调用关单或撤销接口API之前,需确认支付状态。商户也可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。

查询订单状态可通过微信支付订单号或商户订单号两种方式查询。

image.png

您的一键三连,是我更新的最大动力,谢谢

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海