15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 微信PC网站支付采坑记-微信Native支付申请接入

微信PC网站支付采坑记-微信Native支付申请接入

时间:2023-05-22 01:24:02 | 来源:网站运营

时间:2023-05-22 01:24:02 来源:网站运营

微信PC网站支付采坑记-微信Native支付申请接入:

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



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



微信Native支付申请流程



1、 申请微信商户号2、 申请微信企业服务号并且认证,拿到appid3、 将服务号的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=申请的服务号的appidwxpay.appSecret=申请的服务号的appSecretwxpay.mchId=申请的商户号wxpay.partnerKey=商户号的partnerKeywxpay.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); } }

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

关键词:支付,申请

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭