【微信支付】微信支付之 Native 支付

本文详细介绍了微信支付中的Native支付模式,包括前期准备、业务流程时序图、统一下单步骤、沙箱测试、查询订单及可能遇到的问题。在统一下单过程中,讲解了如何获取code_url、设置异步通知,并提供了沙箱测试的注意事项。
摘要由CSDN通过智能技术生成

概述

  Native支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。详情见开发文档

前期准备

  1. 注册微信支付商户号,获取商户号 mch_id、key;
  2. 申请微信认证的服务号、政府或媒体类订阅号、小程序、APP、企业微信其中之一,并与商户号绑定。获取 appid。

开发步骤

Native支付可分为两种模式,商户根据支付场景选择相应模式。本文仅介绍模式二。

业务流程时序图

原生支付模式二时序图

业务流程说明:

(1)商户后台系统根据用户选购的商品生成订单。
(2)用户确认支付后调用微信支付【统一下单API】生成预支付交易;
(3)微信支付系统收到请求后生成预支付交易单,并返回交易会话的二维码链接code_url。
(4)商户后台系统根据返回的code_url生成二维码。
(5)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。
(6)微信支付系统收到客户端请求,验证链接有效性后发起用户支付,要求用户授权。
(7)用户在微信客户端输入密码,确认支付后,微信客户端提交授权。
(8)微信支付系统根据用户授权完成支付交易。
(9)微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。
(10)微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。
(11)未收到支付通知的情况,商户后台系统调用【查询订单API】。
(12)商户确认订单已支付后给用户发货。

统一下单

SDK

API 详见统一下单API
下载官方 SDK ,或通过 maven 获取依赖。推荐使用后者。

<!-- wxpay-sdk -->
<dependency>
    <groupId>com.github.wxpay</groupId>
    <artifactId>wxpay-sdk</artifactId>
    <version>0.0.3</version>
</dependency>

SDK 中集成了一个 WXPayConfig.java 的接口,我们需要写一个实现类,存放配置信息。

public class WXPayConfigImpl implements WXPayConfig {
   
    // 设置证书,没有的话注释掉
    // private byte[] certData;
    // public WXPayConfigImpl() throws Exception {
   
    //    String certPath = "/path/to/apiclient_cert.p12";
    //    File file = new File(certPath);
    //    InputStream certStream = new FileInputStream(file);
    //    this.certData = new byte[(int) file.length()];
    //    certStream.read(this.certData);
    //    certStream.close();
    // }
    // set appid
    public static void setAppId(String appId) {
   
        WXPayConfigImpl.appId = "";
    }
    // set mch_id
    public static void setMchId(String mchId) {
   
        WXPayConfigImpl.mchId = "";
    }
    // set key
    public static void setKey(String key) {
   
        WXPayConfigImpl.key = "";
    }

    public InputStream getCertStream() {
   
        ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);
        return certBis;
    }
    // 异步通知地址
    public String getNotifyUrl() {
   
        return "http://www.xxx.com/wxNotify";
    }

    public int getHttpConnectTimeoutMs() {
   
        return 8000;
    }

    public int getHttpReadTimeoutMs() {
   
        return 10000;
    }

//    IWXPayDomain getWXPayDomain() {
   
//        return null;
//    }
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值