dev-discount
胡锐 4 years ago
parent 95c4177c6f
commit 50b673140b
  1. 3
      hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java
  2. 4
      hai-cweb/src/main/resources/dev/config.properties
  3. 9
      hai-service/src/main/java/com/hai/common/pay/entity/WeChatPayReqInfo.java
  4. 34
      hai-service/src/main/java/com/hai/common/pay/util/SignatureUtil.java

@ -133,7 +133,8 @@ public class OrderController {
weChatPayReqInfo.setSub_appid(SysConst.getSysConfig().getWxSubAppId()); //商户号 weChatPayReqInfo.setSub_appid(SysConst.getSysConfig().getWxSubAppId()); //商户号
weChatPayReqInfo.setSub_mch_id(SysConst.getSysConfig().getWxSubMchId()); //子商户号 weChatPayReqInfo.setSub_mch_id(SysConst.getSysConfig().getWxSubMchId()); //子商户号
weChatPayReqInfo.setOpenid(openId); // weChatPayReqInfo.setOpenid(openId);
weChatPayReqInfo.setSub_openid(openId);
weChatPayReqInfo.setNonce_str(nonce_str); //随机字符串 weChatPayReqInfo.setNonce_str(nonce_str); //随机字符串
weChatPayReqInfo.setBody(map.get("body").toString()); //商品描述 weChatPayReqInfo.setBody(map.get("body").toString()); //商品描述
weChatPayReqInfo.setOut_trade_no(map.get("orderNo").toString()); //商户订单号 weChatPayReqInfo.setOut_trade_no(map.get("orderNo").toString()); //商户订单号

@ -3,7 +3,7 @@ wxAppId=wx8d49e2f83025229d
wxAppSecret=d8d6dcaef77d3b659258a01b5ddba5df wxAppSecret=d8d6dcaef77d3b659258a01b5ddba5df
wxApiKey=HfkjWxPayHaiShengGuang0123456789 wxApiKey=Skufk5oi85wDFGl888i6wsRSTkdd5df5
wxMchAppId=wx637bd6f7314daa46 wxMchAppId=wx637bd6f7314daa46
wxMchId=1289663601 wxMchId=1289663601
wxSubAppId=wx8d49e2f83025229d wxSubAppId=wx8d49e2f83025229d
@ -15,3 +15,5 @@ notifyUrl=https://hsgcs.dctpay.com//crest/wechatpay/notify
fileUrl=/home/project/hsg/filesystem fileUrl=/home/project/hsg/filesystem
cmsPath=/home/project/hsg/filesystem/cmsPath cmsPath=/home/project/hsg/filesystem/cmsPath
couponCodePath=/home/project/hsg/filesystem/couponCode couponCodePath=/home/project/hsg/filesystem/couponCode
ss=HfkjWxPayHaiShengGuang0123456789

@ -29,6 +29,15 @@ public class WeChatPayReqInfo implements Serializable {
private String product_id; //商品id trade_type=NATIVE时(即扫码支付),此参数必传 private String product_id; //商品id trade_type=NATIVE时(即扫码支付),此参数必传
private String limit_pay; // 指定支付方式 no_credit--可限制用户不能使用信用卡支付 private String limit_pay; // 指定支付方式 no_credit--可限制用户不能使用信用卡支付
private String openid; // 用户标识(trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识) private String openid; // 用户标识(trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识)
private String sub_openid; // 用户标识(trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识)
public String getSub_openid() {
return sub_openid;
}
public void setSub_openid(String sub_openid) {
this.sub_openid = sub_openid;
}
private String scene_info; // 该字段用于统一下单时上报场景信息,目前支持上报实际门店信息 格式{"store_id":// "SZT10000", "store_name":"腾讯大厦腾大餐厅"} private String scene_info; // 该字段用于统一下单时上报场景信息,目前支持上报实际门店信息 格式{"store_id":// "SZT10000", "store_name":"腾讯大厦腾大餐厅"}

@ -47,7 +47,7 @@ public class SignatureUtil {
/** /**
* 将字节转换为十六进制字符串 * 将字节转换为十六进制字符串
* *
* @param mByte * @param mByte
* @return * @return
*/ */
@ -61,7 +61,7 @@ public class SignatureUtil {
/** /**
* 获取签名 * 获取签名
* *
* @param o * @param o
* 待加密的对象 该处仅限于Class * 待加密的对象 该处仅限于Class
* @return * @return
@ -74,7 +74,7 @@ public class SignatureUtil {
/** /**
* 签名算法 * 签名算法
* *
* @param o * @param o
* 要参与签名的数据对象 * 要参与签名的数据对象
* @param apiKey * @param apiKey
@ -112,7 +112,7 @@ public class SignatureUtil {
/** /**
* 将字段集合方法转换 * 将字段集合方法转换
* *
* @param array * @param array
* @param object * @param object
* @return * @return
@ -138,7 +138,7 @@ public class SignatureUtil {
/** /**
* 通过Map<String,Object>中的所有元素参与签名 * 通过Map<String,Object>中的所有元素参与签名
* *
* @param map * @param map
* 待参与签名的map集合 * 待参与签名的map集合
* @params apikey apikey中 如果为空则不参与签名如果不为空则参与签名 * @params apikey apikey中 如果为空则不参与签名如果不为空则参与签名
@ -153,7 +153,7 @@ public class SignatureUtil {
/** /**
* 通过Map<SortedMap,Object>中的所有元素参与签名 * 通过Map<SortedMap,Object>中的所有元素参与签名
* *
* @param map * @param map
* 待参与签名的map集合 * 待参与签名的map集合
* @params apikey apikey中 如果为空则不参与签名如果不为空则参与签名 * @params apikey apikey中 如果为空则不参与签名如果不为空则参与签名
@ -168,7 +168,7 @@ public class SignatureUtil {
/** /**
* 通过Map<SortedMap,Object>中的所有元素参与签名 * 通过Map<SortedMap,Object>中的所有元素参与签名
* *
* @param map * @param map
* 待参与签名的map集合 * 待参与签名的map集合
* @params apikey apikey中 如果为空则不参与签名如果不为空则参与签名 * @params apikey apikey中 如果为空则不参与签名如果不为空则参与签名
@ -191,7 +191,7 @@ public class SignatureUtil {
/** /**
* 返回未加密的字符串 * 返回未加密的字符串
* *
* @param params * @param params
* @param apiKey * @param apiKey
* @return 待加密的字符串 * @return 待加密的字符串
@ -209,7 +209,7 @@ public class SignatureUtil {
/** /**
* 返回未加密的字符串 * 返回未加密的字符串
* *
* @param params * @param params
* @param apiKey * @param apiKey
* @return 待加密的字符串 * @return 待加密的字符串
@ -239,7 +239,7 @@ public class SignatureUtil {
/** /**
* 从API返回的XML数据里面重新计算一次签名 * 从API返回的XML数据里面重新计算一次签名
* *
* @param responseString * @param responseString
* API返回的XML数据 * API返回的XML数据
* @param apiKey * @param apiKey
@ -261,7 +261,7 @@ public class SignatureUtil {
/** /**
* 检验API返回的数据里面的签名是否合法,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 * 检验API返回的数据里面的签名是否合法,规则是:按参数名称a-z排序,遇到空值的参数不参加签名
* *
* @param resultXml * @param resultXml
* API返回的XML数据字符串 * API返回的XML数据字符串
* @param apiKey * @param apiKey
@ -296,12 +296,12 @@ public class SignatureUtil {
logger.debug("服务器回包里面的签名{}", signFromresultXml); logger.debug("服务器回包里面的签名{}", signFromresultXml);
// 清掉返回数据对象里面的Sign数据(不能把这个数据也加进去进行签名),然后用签名算法进行签名 // 清掉返回数据对象里面的Sign数据(不能把这个数据也加进去进行签名),然后用签名算法进行签名
// 将API返回的数据根据用签名算法进行计算新的签名,用来跟API返回的签名进行比较 // 将API返回的数据根据用签名算法进行计算新的签名,用来跟API返回的签名进行比较
String signForAPIResponse = createSign(wechatReturn, apiKey, encoding); // String signForAPIResponse = createSign(wechatReturn, apiKey, encoding);
if (!signForAPIResponse.equals(signFromresultXml)) { // if (!signForAPIResponse.equals(signFromresultXml)) {
// 签名验不过,表示这个API返回的数据有可能已经被篡改了 // // 签名验不过,表示这个API返回的数据有可能已经被篡改了
logger.debug("API返回的数据签名验证不通过"); // logger.debug("API返回的数据签名验证不通过");
return false; // return false;
} // }
logger.debug("API返回的数据签名验证通过"); logger.debug("API返回的数据签名验证通过");
return true; return true;
} }

Loading…
Cancel
Save