关于微信商家向个人零钱付款 后端实现

关于微信商家向用户零钱付款 后端实现

网络上大部分都是用户向商家付款的案例。近期碰到这样一个需求,要求商家向个人账号付款,查询相关资料却寥寥无几。现将个人实现过程总结如下,以供大家批评指正。

首先我先是看了微信支付的接口文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1
,建议大家在实现之前可以阅读一下,熟悉一下流程。
整体的实现思路:
1、获取数据,具体请求参数请参考微信支付文档(https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2)
2、生成签名,也可将此步骤归于第一步操作,此过程也是在对请求参数进行处理。
签名生成的通用步:
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段

第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。 注意:密钥的长度为32个字节。

3、通过java程序向微信提供的接口发送数据(这里用的是post)

实现代码

准备数据

packageParams.put("appid", WXConst.appId);
packageParams.put("mch_id", WXConst.mch_id);
packageParams.put("nonce_str", nonce_str);
packageParams.put("body", body);          packageParams.put("out_trade_no",orderNumber.toString());//订单号
packageParams.put("total_fee", money);
packageParams.put("spbill_create_ip", spbill_create_ip);
packageParams.put("notify_url", WXConst.notify_url);
packageParams.put("trade_type", WXConst.TRADETYPE);
packageParams.put("openid", openid);

将数据按照 “参数=参数值”的形式用“&”拼接成字符串(已将具体业务逻辑写成通用方法,这里直接将方法贴出)

    public static String createLinkString(Map<String, String> params) {
   
                   List<String> keys = new ArrayList<String>(params.keySet());
                   Collections.sort(keys);
                   String prestr = "";
                   for (int i = 0; i < keys.size(); i++) {
   
                         String key = keys.get(i);
                         String value = params.get(key);
                         if (i ==</
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值