微信支付 进行统一下单 签名错误
2016-06-17 08:52
633 查看
微信支付 进行统一下单 签名错误,我在微信支付接口签名校验工具中验证通过,但是还是提示签名错误,我在
key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
重新设置下密钥就可以了,微信坑爹啊
注意,这里的密钥是支付平台中的客户密钥,不是公众号的AppSecret(应用密钥)
Java代码:
public static void createPay(String openid) {
String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
OrderReqBean reqBean = setOrderRequestBean(openid);
String output = getOrderRequestXml(reqBean);
System.out.println("==xml=="+output);
String json = "";
try {
json = WeixinUtil.httpsRequest(url, "POST", output);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("结果:" + json);
}
// 得到统一下单的xml
private static String getOrderRequestXml(OrderReqBean reqBean) {
SortedMap<Object, Object> param = new TreeMap<Object, Object>();
param.put("appid", reqBean.getAppid());
param.put("attach", reqBean.getAttach());
param.put("body", reqBean.getBody());
param.put("detail", reqBean.getDetail());
param.put("device_info", reqBean.getDevice_info());
param.put("mch_id", reqBean.getMch_id());
param.put("nonce_str", reqBean.getNonce_str());
param.put("notify_url", reqBean.getNotify_url());
param.put("out_trade_no", reqBean.getOut_trade_no());
param.put("openid", reqBean.getOpenid());
param.put("spbill_create_ip", reqBean.getSpbill_create_ip());
param.put("total_fee", reqBean.getTotal_fee());
param.put("trade_type", reqBean.getTrade_type());
param.put("sign", reqBean.getSign());
return getRequestXml(param);
}
//把参数封装为xml
private static String getRequestXml(SortedMap<Object, Object> params) {
StringBuffer sb = new StringBuffer();
sb.append("<xml>");
Set<Entry<Object, Object>> es = params.entrySet();
Iterator<Entry<Object, Object>> it = es.iterator();
while (it.hasNext()) {
Map.Entry<Object, Object> entry = (Map.Entry<Object, Object>) it
.next();
String k = (String) entry.getKey();
String v = (String) entry.getValue();
if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k)) {
sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");
} else {
sb.append("<" + k + ">" + v + "</" + k + ">");
}
}
sb.append("</xml>");
return sb.toString();
}
// 得到统一下单的参数
private static OrderReqBean setOrderRequestBean(String openid) {
OrderReqBean reqBean = new OrderReqBean();
String appId = ConfUtil.getSysProperty("weixin.appId");
String secret = ConfUtil.getSysProperty("weixin.apiKey");
String mchId = ConfUtil.getSysProperty("weixin.mch_id");
String ranStr = RandomStringUtils.randomAlphanumeric(31);
reqBean.setAppid(appId);
reqBean.setMch_id(mchId);
reqBean.setAppSecret(secret);
reqBean.setAttach("zhanjiang");
reqBean.setBody("TestIpadMini16G");
reqBean.setDetail("TestIpadMini16G");
reqBean.setDevice_info("WEB");
reqBean.setMch_id(mchId);
reqBean.setNonce_str(ranStr);
reqBean.setNotify_url("http://www.weixin.com/mobile/weixin/weixin_pay_result.jsp");
reqBean.setOut_trade_no(getOutTradeNo());
reqBean.setOpenid(openid);
reqBean.setSpbill_create_ip("125.90.18.104");// SysContext.getClientIp()
reqBean.setTotal_fee("1");
reqBean.setTrade_type("JSAPI");
return setSign(reqBean);
}
/**
* 统一下单设置签名的方式
*
*/
private static OrderReqBean setSign(OrderReqBean reqBean) {
StringBuilder sb = new StringBuilder();
// sb.append("https://api.mch.weixin.qq.com/pay/unifiedorder?appid=");
// 参数名ASCII码从小到大排序(字典序);
sb.append("appid=");
sb.append(reqBean.getAppid());
sb.append("&attach=");
sb.append(reqBean.getAttach());
sb.append("&body=");
sb.append(reqBean.getBody());
sb.append("&detail=");
sb.append(reqBean.getDetail());
sb.append("&device_info=");
sb.append(reqBean.getDevice_info());
sb.append("&mch_id=");
sb.append(reqBean.getMch_id());
sb.append("&nonce_str=");
sb.append(reqBean.getNonce_str());
sb.append("¬ify_url=");
sb.append(reqBean.getNotify_url());
sb.append("&openid=");
sb.append(reqBean.getOpenid());
sb.append("&out_trade_no=");
sb.append(reqBean.getOut_trade_no());
sb.append("&spbill_create_ip=");
sb.append(reqBean.getSpbill_create_ip());
sb.append("&total_fee=");
sb.append(reqBean.getTotal_fee());
sb.append("&trade_type=");
sb.append(reqBean.getTrade_type());
sb.append("&key=");
sb.append(reqBean.getAppSecret());
System.out.println("===signUrl==="+sb.toString());
String sign = MD5.GetMD5Code(sb.toString()).toUpperCase();
reqBean.setSign(sign);
return reqBean;
}
/**
* 得到商户订单号
*
* @return
*/
private static String getOutTradeNo() {
Date date = new Date();
long time = date.getTime();
int ran = (int) (Math.random() * 900) + 100;
return String.valueOf(time) + String.valueOf(ran);
}
public static void main(String[] args) {
createPay("osoyExGrX-8888888888888888");
}
key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
重新设置下密钥就可以了,微信坑爹啊
注意,这里的密钥是支付平台中的客户密钥,不是公众号的AppSecret(应用密钥)
Java代码:
public static void createPay(String openid) {
String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
OrderReqBean reqBean = setOrderRequestBean(openid);
String output = getOrderRequestXml(reqBean);
System.out.println("==xml=="+output);
String json = "";
try {
json = WeixinUtil.httpsRequest(url, "POST", output);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("结果:" + json);
}
// 得到统一下单的xml
private static String getOrderRequestXml(OrderReqBean reqBean) {
SortedMap<Object, Object> param = new TreeMap<Object, Object>();
param.put("appid", reqBean.getAppid());
param.put("attach", reqBean.getAttach());
param.put("body", reqBean.getBody());
param.put("detail", reqBean.getDetail());
param.put("device_info", reqBean.getDevice_info());
param.put("mch_id", reqBean.getMch_id());
param.put("nonce_str", reqBean.getNonce_str());
param.put("notify_url", reqBean.getNotify_url());
param.put("out_trade_no", reqBean.getOut_trade_no());
param.put("openid", reqBean.getOpenid());
param.put("spbill_create_ip", reqBean.getSpbill_create_ip());
param.put("total_fee", reqBean.getTotal_fee());
param.put("trade_type", reqBean.getTrade_type());
param.put("sign", reqBean.getSign());
return getRequestXml(param);
}
//把参数封装为xml
private static String getRequestXml(SortedMap<Object, Object> params) {
StringBuffer sb = new StringBuffer();
sb.append("<xml>");
Set<Entry<Object, Object>> es = params.entrySet();
Iterator<Entry<Object, Object>> it = es.iterator();
while (it.hasNext()) {
Map.Entry<Object, Object> entry = (Map.Entry<Object, Object>) it
.next();
String k = (String) entry.getKey();
String v = (String) entry.getValue();
if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k)) {
sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");
} else {
sb.append("<" + k + ">" + v + "</" + k + ">");
}
}
sb.append("</xml>");
return sb.toString();
}
// 得到统一下单的参数
private static OrderReqBean setOrderRequestBean(String openid) {
OrderReqBean reqBean = new OrderReqBean();
String appId = ConfUtil.getSysProperty("weixin.appId");
String secret = ConfUtil.getSysProperty("weixin.apiKey");
String mchId = ConfUtil.getSysProperty("weixin.mch_id");
String ranStr = RandomStringUtils.randomAlphanumeric(31);
reqBean.setAppid(appId);
reqBean.setMch_id(mchId);
reqBean.setAppSecret(secret);
reqBean.setAttach("zhanjiang");
reqBean.setBody("TestIpadMini16G");
reqBean.setDetail("TestIpadMini16G");
reqBean.setDevice_info("WEB");
reqBean.setMch_id(mchId);
reqBean.setNonce_str(ranStr);
reqBean.setNotify_url("http://www.weixin.com/mobile/weixin/weixin_pay_result.jsp");
reqBean.setOut_trade_no(getOutTradeNo());
reqBean.setOpenid(openid);
reqBean.setSpbill_create_ip("125.90.18.104");// SysContext.getClientIp()
reqBean.setTotal_fee("1");
reqBean.setTrade_type("JSAPI");
return setSign(reqBean);
}
/**
* 统一下单设置签名的方式
*
*/
private static OrderReqBean setSign(OrderReqBean reqBean) {
StringBuilder sb = new StringBuilder();
// sb.append("https://api.mch.weixin.qq.com/pay/unifiedorder?appid=");
// 参数名ASCII码从小到大排序(字典序);
sb.append("appid=");
sb.append(reqBean.getAppid());
sb.append("&attach=");
sb.append(reqBean.getAttach());
sb.append("&body=");
sb.append(reqBean.getBody());
sb.append("&detail=");
sb.append(reqBean.getDetail());
sb.append("&device_info=");
sb.append(reqBean.getDevice_info());
sb.append("&mch_id=");
sb.append(reqBean.getMch_id());
sb.append("&nonce_str=");
sb.append(reqBean.getNonce_str());
sb.append("¬ify_url=");
sb.append(reqBean.getNotify_url());
sb.append("&openid=");
sb.append(reqBean.getOpenid());
sb.append("&out_trade_no=");
sb.append(reqBean.getOut_trade_no());
sb.append("&spbill_create_ip=");
sb.append(reqBean.getSpbill_create_ip());
sb.append("&total_fee=");
sb.append(reqBean.getTotal_fee());
sb.append("&trade_type=");
sb.append(reqBean.getTrade_type());
sb.append("&key=");
sb.append(reqBean.getAppSecret());
System.out.println("===signUrl==="+sb.toString());
String sign = MD5.GetMD5Code(sb.toString()).toUpperCase();
reqBean.setSign(sign);
return reqBean;
}
/**
* 得到商户订单号
*
* @return
*/
private static String getOutTradeNo() {
Date date = new Date();
long time = date.getTime();
int ran = (int) (Math.random() * 900) + 100;
return String.valueOf(time) + String.valueOf(ran);
}
public static void main(String[] args) {
createPay("osoyExGrX-8888888888888888");
}
相关文章推荐
- 朋友圈热文 - 微信变现走出的又一步好棋
- 解决微信OAuth2.0网页授权回调域名只能设置一个的问题
- 这些微信封面图技巧,你不一定知道~
- WeMall微商城营销技巧之二:微信营销成功案例 传统企业怎么做微信营销
- WeMall微商城营销技巧之三:企业进行微信小店营销推广需注意的
- WeMall微商城营销技巧之三:企业进行微信小店营销推广需注意的
- java小程序从数据库中(表)中读取数据然后创建文件夹生成txt文件
- PHP微信API接口页面代码
- 微信企业号开发01 - 获取corpid 和 corpsecret
- 微信测试号设置
- 网页分享到微信常见问题
- 张小龙
- (基于nodejs)微信测试号创建自定义菜单
- 微信公众平台二次开发需要配置的几个地址与参数
- 176 php 微信第三方平台填坑记
- HTML简单购物数量小程序
- 微信公众号推送地图
- 微信内置浏览器切换到公众号编辑状态的实现方法。
- web 购物 加减小程序
- 简单的购物数量的HTML小程序