微信Native支付申请接入流程-避免踩坑指南

1 篇文章 0 订阅
1 篇文章 0 订阅

常见错误 强烈建议阅读完再搞避免踩坑多花冤枉钱

1、该ID未完成微信认证,请确认后再试
完成appid的认证,微信服务号为企业认证,开放平台为开发者认证。
2、你输入的APPID认证主体名称与实际认证主体不一致,请检查修改后重试
检查开放平台或者公众平台认证主体和商户号主体是否一致。
3、不支持关联该类型的appID
微信Native支付(PC网站)不能用开放平台的appid.
微信Native支付的appid 必须为 微信服务号 即认证主体为企业的公众号。
微信Native支付的appid 必须为微信服务号 即认证主体为企业的公众号。
微信Native支付的appid 必须为微信服务号即认证主体为企业的公众号。
4、修改支付时提示的收款方名称
收款方名称要修改商户号里面的商户简称

微信Native支付申请流程

1、 申请微信商户号
2、 申请微信企业服务号并且认证,拿到appid
3、 将服务号的appid与商户号绑定
4、申请证书key之类的

微信Native支付接入

java开发 推荐使用IJPay
1、引入ijpay的库

<dependency>
    <groupId>com.github.javen205</groupId>
    <artifactId>IJPay-WxPay</artifactId>
    <version>2.7.3</version>
</dependency>

2、创建请求需要的参数类。配置信息在application中

public class WxPayConfig {
    /**
     * 设置微信公众号或者小程序等的appid.
     */
    @Value("${wx.pay.appId}")
    private String appId;

    /**
     * 微信支付商户号.
     */
    @Value("${wx.pay.mchId}")
    private String mchId;

    /**
     * 微信支付商户密钥.
     */
    @Value("${wx.pay.mchKey}")
    private String mchKey;

    /**
     * 异步回调地址
     */
    @Value("${wx.pay.notifyUrl}")
    private String notifyUrl;
}

3、配置信息application.properties

wxpay.appId=申请的服务号的appid
wxpay.appSecret=申请的服务号的appSecret
wxpay.mchId=申请的商户号
wxpay.partnerKey=商户号的partnerKey
wxpay.certPath=商户号p12证书
wxpay.domain=扫码支付完成的异步校验通知url

4、统一下单

  Map<String, String> params = UnifiedOrderModel
                .builder()
                .appid(wxPayConfig.appId)
                .mch_id(wxPayConfig.mchId)
                .nonce_str(WxPayKit.generateStr())
                .body("赵汤圆支付")
                .attach("赵汤圆支付踩坑")
                .out_trade_no(createOrderRequestDto.getId())
                .total_fee(total_fee)
                .spbill_create_ip(ip)
                .notify_url(wxPayConfig.domain)
                .trade_type(TradeType.NATIVE.getTradeType())
                .build()
                .createSign(wxPayConfig.partnerKey, SignType.HMACSHA256);
        String xmlResult = WxPayApi.pushOrder(false, params);
        Map<String, String> result = WxPayKit.xmlToMap(xmlResult);
        String returnCode = result.get("return_code");
        String returnMsg = result.get("return_msg");
        System.out.println(returnMsg);
        if (!WxPayKit.codeIsOk(returnCode)) {
				    // 异常状态判断 替换成你自己的
            throw new ServiceException(ErrorTypeEnum.RECHARGE_ERROR);
        }
        String resultCode = result.get("result_code");
        if (!WxPayKit.codeIsOk(resultCode)) {
				// 异常状态判断 替换成你自己的
            throw new ServiceException(ErrorTypeEnum.RECHARGE_ERROR);
        }
        //生成预付订单success
        String qrCodeUrl = result.get("code_url");
        try {
            // 生成下单的二维码,返回给客户端显示
						ByteArrayOutputStream out = new ByteArrayOutputStream();
            QrCodeKit.encodeOutPutSteam(out, qrCodeUrl, BarcodeFormat.QR_CODE,
                    3, ErrorCorrectionLevel.H, "png", 200, 200);
            BASE64Encoder encoder = new BASE64Encoder();
            imgBase64Str = encoder.encode(out.toByteArray());
        } catch (IOException e) {
            e.printStackTrace();
        }

        return imgBase64Str;
	```
	5、异步通知
	```java
	String xmlMsg = HttpKit.readData(request);
        logger.info("支付通知=" + xmlMsg);
        Map<String, String> params = WxPayKit.xmlToMap(xmlMsg);

        String returnCode = params.get("return_code");

        // 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
        // 注意此处签名方式需与统一下单的签名类型一致
        if (WxPayKit.verifyNotify(params, wxPayConfig.partnerKey, SignType.HMACSHA256)) {
            if (WxPayKit.codeIsOk(returnCode)) {
                // 更新订单信息
                // 发送通知等
                String out_trade_no = params.get("out_trade_no");
                String total_fee = params.get("total_fee");
                Map<String, String> xml = new HashMap<String, String>(2);
                xml.put("return_code", "SUCCESS");
                xml.put("return_msg", "OK");
                return WxPayKit.toXml(xml);
            }
        }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值