<正则吃饺子> :关于微信支付的简单总结说明(一)

关于支付,一直想参与开发,现在根据项目中已有及参见的微信开发文档,将自己对于微信开发的流程进行简单的总结,以备后用和帮助后来者。

一、相关官方文档

微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/index.html

二、参考博文

(待添加,等我找找..)

三、自己参看文档时候的简单文档整理,

ps:只为了方便自己记忆和联想

四、根据官方文档中,标记后台主要做的工作流程

五、参看项目代码时候,整理的demo,来源于网络

(1)MD5Util  ----  生成签名时候使用

package com.weixin.test;

import java.security.MessageDigest;

/**
 * 微信测试MD5
 * @author Administrator
 *
 */
public class MD5Util {

    private static String byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++)
            resultSb.append(byteToHexString(b[i]));

        return resultSb.toString();
    }

    private static String byteToHexString(byte b) {
        int n = b;
        if (n < 0)
            n += 256;
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }

    public static String MD5Encode(String origin, String charsetname) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (charsetname == null || "".equals(charsetname))
                resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
            else
                resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
        } catch (Exception exception) {
        }
        return resultString;
    }

    private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

}

(2)PayTest

package com.weixin.test;

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

public class PayTest {

    // http://mch.weixin.qq.com/wiki/doc/api/index.php?chapter=4_3
    private static String Key = "192006250b4c09247ec02edce69f6a2d";

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(">>>模拟微信支付<<<");
        System.out.println("==========华丽的分隔符==========");
        // 微信api提供的参数
        String appid = "wxd930ea5d5a258f4f";
        String mch_id = "10000100";
        String device_info = "1000";
        String body = "test";
        String nonce_str = "ibuaiVcKdpRxkhJA";

        SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
        parameters.put("appid", appid);
        parameters.put("mch_id", mch_id);
        parameters.put("device_info", device_info);
        parameters.put("body", body);
        parameters.put("nonce_str", nonce_str);

        String characterEncoding = "UTF-8";
        String weixinApiSign = "9A0A8659F005D6984697E2CA0A9CF3B7";
        System.out.println("微信的签名是:" + weixinApiSign);
        String mySign = createSign(characterEncoding, parameters);
        System.out.println("我     的签名是:" + mySign);

        if (weixinApiSign.equals(mySign)) {
            System.out.println("恭喜你成功了~");
        } else {
            System.out.println("不行啊,再接再厉~");
        }

        String userAgent = "Mozilla/5.0(iphone;CPU iphone OS 5_1_1 like Mac OS X) AppleWebKit/534.46(KHTML,like Geocko) Mobile/9B206 MicroMessenger/5.0";

        char agent = userAgent.charAt(userAgent.indexOf("MicroMessenger") + 15);

        System.out.println("微信的版本号:" + new String(new char[] { agent }));
    }

    /**
     * 微信支付签名算法sign
     * @param characterEncoding
     * @param parameters
     * @return
     */
    @SuppressWarnings("unchecked")
    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()) {
            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=" + Key);
        String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
        return sign;
    }

}

六、项目中相关代码及使用的util情况

(待续....)

时间: 2024-10-20 09:33:08

<正则吃饺子> :关于微信支付的简单总结说明(一)的相关文章

&lt;正则吃饺子&gt; :关于微信支付的简单总结说明(二)

关于微信退款 一.官方文档 申请退款:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_4&index=6 二.退款流程图 一个百度文库的文档:https://wenku.baidu.com/view/754c78e93186bceb19e8bbcc.html 三.项目中使用的代码 拿来作个参考吧,方便记忆和理解 /** * 微信支付申请退款 * * @param weChatPayRefund * @return */ p

&lt;正则吃饺子&gt; :关于 Matcher 的 replaceAll 的简单使用

在线文档地址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh replaceAll public String replaceAll(String replacement) 替换模式与给定替换字符串相匹配的输入序列的每个子序列. 此方法首先重置匹配器.然后,它将扫描输入序列以查找该模式的匹配项.不属于任何匹配的字符被直接添加到结果字符串:在结果中每个匹配都将被替换字符串所替换.替换字符串可能包含到已捕获子序列的引用,如在 appendRepla

&lt;正则吃饺子&gt; :关于redis配置文件参数详解

来源于网络博文,感谢作者的分享,转载只为学习,方便查找,原文地址:http://blog.csdn.net/ljl890705/article/details/51540427 Redis是一个应用非常广泛的高性能Key-Value型数据库,与memcached类似,但功能更加强大! 本文将按照不同功能模块的方式,依次对各个功能模块的配置参数进行详细介绍. GENERAL ./redis-server /path/to/redis.conf 按照指定的配置文件启动 include /path/t

微信支付 全套流程看完就会 pc扫码支付

一:前期微信支付扫盲知识 前提条件是已经有申请了微信支付功能的公众号,然后我们需要得到公众号APPID和微信商户号,这个分别在微信公众号和微信支付商家平台上面可以发现.其实在你申请成功支付功能之后,微信会通过邮件把Mail转给你的,有了这些信息之后,我们就可以去微信支付服务支持页面:https://pay.weixin.qq.com/service_provider/index.shtml 打开这个页面,点击右上方的链接[开发文档]会进入到API文档说明页面,看起来如下 选择红色圆圈的扫码支付就

玩转微信支付(python)

废话 github源码 做了京东,支付宝和微信的python版本支付,发现只有微信支付开发文档是最用心去做的,讲解的非常仔细,还有大量的伪代码,说实话,实现起来真是没有难度,只是前期准备的东西有很多,比如要申请各种认证,至少到目前为止,我没有发现诸如京东支付或者支付宝支付那样的测试环境供普通开发者去调试 技术描点 微信支付方式非常多,详见:https://pay.weixin.qq.com/wiki/doc/api/index.html. 我在这里是用的扫码支付,用于pc网站.首先要准备的是两个

【IOS】简单的测试银联和微信支付

简单的测试银联和微信支付 简单快速的集成银联支付和微信支付的测试 下载地址:http://www.devstore.cn/code/info/749.html 运行截图:    IOS热门源码下载: 模仿手机支付宝界面 高仿网易4.0新UI框架 实现功能比较齐全的 UITextField 版权声明:本文为博主原创文章,未经博主允许不得转载.

ThinkPHP5微信支付扩展库(超级简单, 超级超好用!)

ThinkPHP5 微信支付扩展库(2017年9月24日) 欢迎到Github查看最新代码https://github.com/dream2023/ThinkPHP5-wxpay 扫码支付调用\wxpay\NativePay::getPayImage($params)即可 小程序支付(流程详解http://blog.csdn.net/diannaodashen/article/details/78075049)调用\wxpay\JsapiPay::getPayParams($params, $c

[5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)

1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按钮时,执行一个Ajax到后台 后台通过前台的部分信息(如商品名额,金额等),将其组装成符合微信要求格式的xml,然后调用微信的"统一下单接口" 调用成功后微信会返回一个组装好的xml,我们提取之中的消息(预支付id也在其中)以JSON形式返回给前台 前台将该JSON传参给微信内置JS的方法

微信支付开发(APP)的各种坑,.net和iOS的各种陷阱,解决.net调用下单接口提示无权限,解决iOS跳转到微信支付页面中间只有一个确定按钮

直入主题之前,请容我吐槽一下微*的官方东西:ASDFQ%#$%$#$%^[email protected]#$%DSFQ#$%.......:吐槽玩了!大家心照就好. 要完成手机APP跳转到微信的APP进行微信支付,需要进行如下操作: 1.先去微信的开放平台(http://open.weixin.qq.com)进行开发者账号的注册. 2.新建一个APP应用,然后填写必填信息提交审核. 3.进入APP应用,在接口信息中,进行申请“获得微信支付能力”的功能,期间会提交相关的公司营业信息证明等. 通过