关于微信支付参数[签名]字段-Java代码片段

最近在开发过程中发遇到了对于微信下单的功能,签名不正确特意留下了目前可行的签名方法代码,记录一下对应的代码,学习和备用。


import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;

//在线验证网址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1 请在非IE浏览器下打开
public class TestSign {

	private static String Key = "15246652111";  

    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
    	System.out.println("==========》微信签名开始");
        //微信api提供的参数  
        SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();  
        parameters.put("appid", "wx1236544788");
        parameters.put("attach", "铃铛");
        parameters.put("body", "铃铛购买");
        parameters.put("mch_id", "15246652111");
        parameters.put("nonce_str", "bkvYgKB14He08vWx");
        parameters.put("notify_url", "http://www.lvnnet.com/lincombPay/wcpay/wechatPayNotify");
        parameters.put("openid", "oPYQ-v-QWERTYUIhddryuiHKlsmMM");
        parameters.put("out_trade_no", "032018032916420100479947");
        parameters.put("spbill_create_ip", "172.16.107.206");
        parameters.put("total_fee", "1");
        parameters.put("trade_type", "JSAPI");
        String signStr = createSign("UTF-8", parameters);
        System.out.println("生成微信签名==========》" + signStr);
        System.out.println("==========》微信签名结束");
    }  
  
    /** 
     * 微信支付签名算法sign 
     * @param characterEncoding 
     * @param parameters 
     * @return 
     */  
    @SuppressWarnings({"rawtypes" })  
    public static String createSign(String characterEncoding,SortedMap<Object,Object> parameters){  
        StringBuffer sb = new StringBuffer();
        //所有参与传参的参数按照accsii排序(升序)  
        Set<?> es = parameters.entrySet();
        Iterator<?> it = es.iterator();  
        while(it.hasNext()) {  
            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 + "&");  
            }  
        }  
        //重点说明:这个Key是对应的商户编码  是针对于支付发起的是有有个商户编号
        sb.append("key=" + Key);
        System.out.println("加密前封装的字符串:"+sb.toString());
        String sign = Md5.MD5Encode(sb.toString(), characterEncoding).toUpperCase();  
        return sign;  
    } 
	
	
}

执行结果:

==========》微信签名开始
加密前封装的字符串:appid=wx1236544788&attach=铃铛&body=铃铛购买&mch_id=15246652111&nonce_str=bkvYgKB14He08vWx&notify_url=http://www.lvnnet.com/lincombPay/wcpay/wechatPayNotify&openid=oPYQ-v-QWERTYUIhddryuiHKlsmMM&out_trade_no=032018032916420100479947&spbill_create_ip=172.16.107.206&total_fee=1&trade_type=JSAPI&key=15246652111
生成微信签名==========》673DFF272B6168529BA0830ABF3095C4
==========》微信签名结束


 

转载于:https://my.oschina.net/xulin/blog/1787286

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值