weixin.popular.util.PayUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of weixin-popular Show documentation
Show all versions of weixin-popular Show documentation
The weixin-popular is a JAVA SDK for weixin. Weixin web url is https://mp.weixin.qq.com.
package weixin.popular.util;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
import weixin.popular.bean.pay.PayJsRequest;
import weixin.popular.bean.pay.PayNativeReply;
import weixin.popular.bean.pay.PayNativeRequest;
import weixin.popular.bean.pay.PayPackage;
import weixin.popular.bean.paymch.MchPayApp;
import weixin.popular.bean.paymch.MchPayNativeReply;
import weixin.popular.bean.paymch.PapayEntrustweb;
public class PayUtil {
/**
* 生成支付JS请求JSON
* @param payPackage payPackage
* @param appId appId
* @param paternerKey paternerKey
* @param paySignkey appkey
* @return json
*/
public static String generatePayJsRequestJson(PayPackage payPackage,
String appId,
String paternerKey,
String paySignkey){
Map mapP = MapUtil.objectToMap(payPackage);
String package_ = SignatureUtil.generatePackage(mapP, paternerKey);
PayJsRequest payJsRequest = new PayJsRequest();
payJsRequest.setAppId(appId);
payJsRequest.setNonceStr(UUID.randomUUID().toString());
payJsRequest.setPackage_(package_);
payJsRequest.setSignType("sha1");
payJsRequest.setTimeStamp(System.currentTimeMillis()/1000+"");
Map mapS = MapUtil.objectToMap(payJsRequest,"signType","paySign");
String paySign = SignatureUtil.generatePaySign(mapS,paySignkey);
payJsRequest.setPaySign(paySign);
return JsonUtil.toJSONString(payJsRequest);
}
/**
* 生成Native支付JS请求URL
* @param appid appid
* @param productid productid
* @param paySignkey paySignkey
* @return url
*/
public static String generatePayNativeRequestURL(
String appid,
String productid,
String paySignkey){
PayNativeRequest payNativeRequest = new PayNativeRequest();
payNativeRequest.setAppid(appid);
payNativeRequest.setNoncestr(UUID.randomUUID().toString());
payNativeRequest.setProductid(productid);
payNativeRequest.setTimestamp(System.currentTimeMillis()/1000+"");
Map mapS = MapUtil.objectToMap(payNativeRequest,"sign");
String sign = SignatureUtil.generatePaySign(mapS,paySignkey);
payNativeRequest.setSign(sign);
Map map = MapUtil.objectToMap(payNativeRequest);
return "weixin://wxpay/bizpayurl?" + MapUtil.mapJoin(map, false, false);
}
/**
* 生成 native 支付回复XML
* @param payPackage payPackage
* @param appId appId
* @param retCode 0 正确
* @param retErrMsg retErrMsg
* @param paternerKey paternerKey
* @return xml
*/
public static String generatePayNativeReplyXML(PayPackage payPackage,
String appId,
String retCode,
String retErrMsg,
String paternerKey){
PayNativeReply payNativeReply = new PayNativeReply();
payNativeReply.setAppid(appId);
payNativeReply.setNoncestr(UUID.randomUUID().toString());
payNativeReply.setRetcode(retCode);
payNativeReply.setReterrmsg(retErrMsg);
payNativeReply.setTimestamp(System.currentTimeMillis()+"");
String package_ = SignatureUtil.generatePackage(MapUtil.objectToMap(payPackage),paternerKey);
payNativeReply.setPackage_(package_);
payNativeReply.setSignmethod("sha1");
String appSignature = SignatureUtil.generatePackage(
MapUtil.objectToMap(payNativeReply,"appsignature","signmethod"),
paternerKey);
payNativeReply.setAppsignature(appSignature);
return XMLConverUtil.convertToXML(payNativeReply);
}
//MCH -------------------------------------------------
/**
* (MCH)生成支付JS请求对象
* @param prepay_id 预支付订单号
* @param appId appId
* @param key 商户支付密钥
* @return json
*/
public static String generateMchPayJsRequestJson(String prepay_id,String appId,String key){
String package_ = "prepay_id="+prepay_id;
PayJsRequest payJsRequest = new PayJsRequest();
payJsRequest.setAppId(appId);
payJsRequest.setNonceStr(UUID.randomUUID().toString().replace("-", ""));
payJsRequest.setPackage_(package_);
payJsRequest.setSignType("MD5");
payJsRequest.setTimeStamp(System.currentTimeMillis()/1000+"");
//@fantycool 提交修正bug
//Map mapS = MapUtil.objectToMap(payJsRequest,"signType","paySign");
Map mapS = MapUtil.objectToMap(payJsRequest);
String paySign = SignatureUtil.generateSign(mapS,key);
payJsRequest.setPaySign(paySign);
return JsonUtil.toJSONString(payJsRequest);
}
/**
* (MCH)生成Native支付请求URL
* @param appid appid
* @param mch_id mch_id
* @param productid productid
* @param key key
* @return url
*/
public static String generateMchPayNativeRequestURL(
String appid,
String mch_id,
String productid,
String key){
Map map = new LinkedHashMap();
map.put("appid",appid);
map.put("mch_id",mch_id);
map.put("time_stamp",System.currentTimeMillis()/1000+"");
map.put("nonce_str",UUID.randomUUID().toString().replace("-", ""));
map.put("product_id",productid);
String sign = SignatureUtil.generateSign(map,key);
map.put("sign",sign);
return "weixin://wxpay/bizpayurl?" + MapUtil.mapJoin(map, false, false);
}
/**
* (MCH)生成 native 支付回复XML
* @param mchPayNativeReply mchPayNativeReply
* @param key key
* @return xml
*/
public static String generateMchPayNativeReplyXML(MchPayNativeReply mchPayNativeReply,String key){
Map map = MapUtil.objectToMap(mchPayNativeReply);
String sign = SignatureUtil.generateSign(map,key);
mchPayNativeReply.setSign(sign);
return XMLConverUtil.convertToXML(mchPayNativeReply);
}
/**
* (MCH)生成支付APP请求数据
* @param prepay_id 预支付订单号
* @param appId appId
* @param partnerid 商户平台号
* @param key 商户支付密钥
* @return app data
*/
public static MchPayApp generateMchAppData(String prepay_id,String appId,String partnerid,String key){
Map wx_map = new LinkedHashMap();
wx_map.put("appid", appId);
wx_map.put("partnerid", partnerid);
wx_map.put("prepayid", prepay_id);
wx_map.put("package", "Sign=WXPay");
wx_map.put("noncestr", UUID.randomUUID().toString().replace("-", ""));
wx_map.put("timestamp", System.currentTimeMillis()/1000+"");
String sign = SignatureUtil.generateSign(wx_map,key);
MchPayApp mchPayApp = new MchPayApp();
mchPayApp.setAppid(appId);
mchPayApp.setPartnerid(partnerid);
mchPayApp.setPrepayid(prepay_id);
mchPayApp.setPackage_(wx_map.get("package"));
mchPayApp.setNoncestr(wx_map.get("noncestr"));
mchPayApp.setTimestamp(wx_map.get("timestamp"));
mchPayApp.setSign(sign);
return mchPayApp;
}
/**
* 生成代扣签约URL
* @param papayEntrustweb papayEntrustweb
* @param key key
* @return url
*/
public static String generatePapayEntrustwebURL(PapayEntrustweb papayEntrustweb,String key){
Map map = MapUtil.objectToMap( papayEntrustweb);
String sign = SignatureUtil.generateSign(map,key);
map.put("sign", sign);
String params = MapUtil.mapJoin(map, false, true);
return "https://api.mch.weixin.qq.com/papay/entrustweb?"+params;
}
}