/**
* 获取sign签名
*
* @return
*/
private
String genPayReq() {
// 获取参数的值
PayReq request =
new
PayReq();
request.appId = ConstantsMember.APP_ID;
request.partnerId = ConstantsMember.MCHID;
request.prepayId = mPrepayId;
request.packageValue =
"Sign=WXPay"
;
request.nonceStr = DataUtil.getGuid();
request.timeStamp = DataUtil.getTimeStamp();
// 把参数的值传进去SortedMap集合里面
SortedMap<Object, Object> parameters =
new
TreeMap<Object, Object>();
// {appid=wx34df375d7dae8c90, noncestr=3BF34EF2CA4A462DB8D4EA48E785CDC3,
// package=Sign=WXPay, partnerid=1349967601,
// prepayid=wx2016070910354542c7155d4e0846850809, timestamp=1468031760}
parameters.put(
"appid"
, request.appId);
parameters.put(
"noncestr"
, request.nonceStr);
parameters.put(
"package"
, request.packageValue);
parameters.put(
"partnerid"
, request.partnerId);
parameters.put(
"prepayid"
, request.prepayId);
parameters.put(
"timestamp"
, request.timeStamp);
String characterEncoding =
"UTF-8"
;
String mySign = createSign(characterEncoding, parameters);
System.out.println(
"我的签名是:"
+ mySign);
return
mySign;
}
/**
* 微信支付签名算法sign
*
* @param characterEncoding
* @param parameters
* @return
*/
public
static
String createSign(String characterEncoding,
SortedMap<Object, Object> parameters) {
StringBuffer sb =
new
StringBuffer();
Set es = parameters.entrySet();
// 所有参与传参的参数按照accsii排序(升序)
Iterator it = es.iterator();
while
(it.hasNext()) {
@SuppressWarnings
(
"rawtypes"
)
Map.Entry entry = (Map.Entry) it.next();
String k = (String) entry.getKey();
Object v = entry.getValue();
if
(
null
!= v && !
""
.equals(v) && !
"sign"
.equals(k)
&& !
"key"
.equals(k)) {
sb.append(k +
"="
+ v +
"&"
);
}
}
sb.append(
"key="
+ ConstantsMember.KEY);
//KEY是商户秘钥
String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding)
.toUpperCase();
return
sign;
// D3A5D13E7838E1D453F4F2EA526C4766
// D3A5D13E7838E1D453F4F2EA526C4766
}
以上就是本文的全部内容,亲测有效,希望对大家的学习有所帮助,也希望大家多多支持我的博客。