JAVA开发微信支付(JSAPI方式)大致流程

参考官方API文档 (先看哈官方文档好有一脸懵逼的感觉)

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

官方SDK (相当于工具类,可以方便后面的XML和map转换,以及随机数和一些加密签名的操作,有java和PHP等开发SDK,这里选择java SDK进行下载)

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

前提条件你需要有微信支付四大参数(就是微信公众已认证的服务号和微信商户平台账号)

 微信公众平台:

    公众APPID:wx15*********a8

    APPSECEPT : c210***************892d7

微信商户平台:

    商户ID:14******42

    API密钥:5d5************b35b

1:统一下单

构造接口文档的11个重要参数(按照微信官方的协议和要求拼凑)

1.        appid APPID (已有)

2.        mch_id 商户ID (已有)

3.        nonce_str 随机字符串用WXPayUtil中的generateNonceStr()即可,就是生成UUID的方法;

4.        sign 签名 用WXPayUtil中的generateSignature(finalMap<String, String> data, String key)方法,data是将除了sign外,其他10个参数放到map中,key是四大配置参数中的API秘钥(paternerKey)(这里不要着急管它,最后处理它);

5.        body 所支付的名称

6.        out_trade_no 自己后台生成的订单号(商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|* 且在同一个商户号下唯一。详见商户订单号)

7.        total_fee 支付金额 单位:分,为了测试此值给1,表示支付1分钱

8.        spbill_create_ip IP地址 网上很多ip的方法,自己找,此处测试给“127.0.0.1”

9.        notify_url 回调地址:这是微信支付成功后,微信那边会带着一大堆参数(XML格式)请求这个地址多次,这个地址做我们业务处理如:修改订单状态,赠送积分等。Ps:支付还没成功还想这么远干嘛,最后再说。地址要公网可以访问。

10.    trade_type 支付类型 咱们是公众号支付此处给“JSAPI”

11.    openid 支付人的微信公众号对应的唯一标识,每个人的openid在不同的公众号是不一样的,这11个参数里,最费劲的就是他了,其他的几乎都已经解决,现在开发得到这个参数。

将以上参数构造为一个map,使用SDK的工具类进行转换为XML格式(以为必须遵循微信的协议,他说json就传json,XML就XML)

例如

 //拼接统一下单地址参数
        Map<String, String> paraMap = new HashMap<String, String>();
//构造map
            paraMap.put("appid", PayConfig.APP_ID);  												//APPid
            paraMap.put("body",
                    circulationOrderFromWrap.getCirculationOrderFrom().getCommodityName());			//商品名称
            paraMap.put("mch_id", PayConfig.MCH_ID);  												//商户号
            paraMap.put("nonce_str", WXPayUtil.generateNonceStr());
            paraMap.put("openid", userOpenId);
            paraMap.put("out_trade_no",
                    circulationOrderFromWrap.getCirculationOrderFrom().getOrderNumber());			//订单号
            paraMap.put("spbill_create_ip", ip);
            paraMap.put("total_fee","1");
            paraMap.put("trade_type", "JSAPI");
            paraMap.put("notify_url",PayConfig.NOTIFY_URL);	
//前面的参数就是为签名做准备的,下面就是签名											
            String sign = WXPayUtil.generateSignature(paraMap, PayConfig.MCH_KEY);

            paraMap.put("sign", sign);

            String xml = WXPayUtil.mapToXml(paraMap);//将所有参数(map)转xml格式
// 发送post请求"统一下单接口"返回预支付id:prepay_id(半天就为获取这个玩意)
  String xmlStr=HttpClientPostUtil.doPost(PayConfig.UNIFIEDORDER_URL, xml);


带续....

 

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页