java sdk 微信支付_Java 微信支付官方SDK源码(已修复XXE漏洞)

【实例简介】WxPayAPI_JAVA,版本:java_sdk_v3.0.9 ,最后更新于:2018-07-04

【实例截图】

【核心代码】

package com.github.wxpay.sdk;

import com.github.wxpay.sdk.WXPayConstants.SignType;

import java.util.HashMap;

import java.util.Map;

public class WXPay {

private WXPayConfig config;

private SignType signType;

private boolean autoReport;

private boolean useSandbox;

private String notifyUrl;

private WXPayRequest wxPayRequest;

public WXPay(final WXPayConfig config) throws Exception {

this(config, null, true, false);

}

public WXPay(final WXPayConfig config, final boolean autoReport) throws Exception {

this(config, null, autoReport, false);

}

public WXPay(final WXPayConfig config, final boolean autoReport, final boolean useSandbox) throws Exception{

this(config, null, autoReport, useSandbox);

}

public WXPay(final WXPayConfig config, final String notifyUrl) throws Exception {

this(config, notifyUrl, true, false);

}

public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport) throws Exception {

this(config, notifyUrl, autoReport, false);

}

public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception {

this.config = config;

this.notifyUrl = notifyUrl;

this.autoReport = autoReport;

this.useSandbox = useSandbox;

if (useSandbox) {

this.signType = SignType.MD5; // 沙箱环境

}

else {

this.signType = SignType.HMACSHA256;

}

this.wxPayRequest = new WXPayRequest(config);

}

private void checkWXPayConfig() throws Exception {

if (this.config == null) {

throw new Exception("config is null");

}

if (this.config.getAppID() == null || this.config.getAppID().trim().length() == 0) {

throw new Exception("appid in config is empty");

}

if (this.config.getMchID() == null || this.config.getMchID().trim().length() == 0) {

throw new Exception("appid in config is empty");

}

if (this.config.getCertStream() == null) {

throw new Exception("cert stream in config is empty");

}

if (this.config.getWXPayDomain() == null){

throw new Exception("config.getWXPayDomain() is null");

}

if (this.config.getHttpConnectTimeoutMs() < 10) {

throw new Exception("http connect timeout is too small");

}

if (this.config.getHttpReadTimeoutMs() < 10) {

throw new Exception("http read timeout is too small");

}

}

/**

* 向 Map 中添加 appid、mch_id、nonce_str、sign_type、sign

* 该函数适用于商户适用于统一下单等接口,不适用于红包、代金券接口

*

* @param reqData

* @return

* @throws Exception

*/

public Map fillRequestData(Map reqData) throws Exception {

reqData.put("appid", config.getAppID());

reqData.put("mch_id", config.getMchID());

reqData.put("nonce_str", WXPayUtil.generateNonceStr());

if (SignType.MD5.equals(this.signType)) {

reqData.put("sign_type", WXPayConstants.MD5);

}

else if (SignType.HMACSHA256.equals(this.signType)) {

reqData.put("sign_type", WXPayConstants.HMACSHA256);

}

reqData.put("sign", WXPayUtil.generateSignature(reqData, config.getKey(), this.signType));

return reqData;

}

/**

* 判断xml数据的sign是否有效,必须包含sign字段,否则返回false。

*

* @param reqData 向wxpay post的请求数据

* @return 签名是否有效

* @throws Exception

*/

public boolean isResponseSignatureValid(Map reqData) throws Exception {

// 返回数据的签名方式和请求中给定的签名方式是一致的

return WXPayUtil.isSignatureValid(reqData, this.config.getKey(), this.signType);

}

/**

* 判断支付结果通知中的sign是否有效

*

* @param reqData 向wxpay post的请求数据

* @return 签名是否有效

* @throws Exception

*/

public boolean isPayResultNotifySignatureValid(Map reqData) throws Exception {

String signTypeInData = reqData.get(WXPayConstants.FIELD_SIGN_TYPE);

SignType signType;

if (signTypeInData == null) {

signType = SignType.MD5;

}

else {

signTypeInData = signTypeInData.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值