最近要做网页微信公众号网页调微信支付。好了,废话不多说,先看官方的文档:
https://pay.weixin.qq.com/index.php/home/login?return_url=%2F
1、打开公众号支付:
2、查看第二阶段的开发文档
进入到 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1
3、先查看业务流程
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4
4、重点如下图红框标识
5、重点在第4和第5步;图中有提到调用【统一下单API()】来生成预付订单()也就是先要生成prepay_id。
废话不多说,先看接口文档中的统一下单API:统一下单API
6、在该接口中有提到【“除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。”】。OK,其它的先不管;先根据接口API,编写代码:
/**
* 构建微信统一支付请求xml串
* @param payParams
* @return str
*/
public static String buildUnifiedOrderReq(Map<String,String> payParams){
String payStr = "";
payStr += "<xml>";
payStr += "<appid>"+payParams.get("appid")+"</appid>";
payStr += "<body>"+payParams.get("body")+"</body>";
payStr += "<mch_id>"+payParams.get("mch_id")+"</mch_id>";
payStr += "<nonce_str>"+payParams.get("nonce_str")+"</nonce_str>";
payStr += "<notify_url>"+payParams.get("notify_url")+"</notify_url>";
payStr += "<openid>"+payParams.get("openid")+"</openid>";
payStr += "<out_trade_no>"+payParams.get("out_trade_no")+"</out_trade_no>";
payStr += "<spbill_create_ip>"+payParams.get("spbill_create_ip")+"</spbill_create_ip>";
payStr += "<total_fee>"+payParams.get("total_fee")+"</total_fee>";
payStr += "<trade_type>JSAPI</trade_type>";
payStr += "<sign>"+payParams.get("sign")+"</sign>";
payStr +="</xml>";
return payStr;
}
7、在编写代码的过程中,你会发现在调用统一下单接口前,需要获取支付用户的openid。在接口中有获取openid的相关链接。因我是公众号,故来到此页面:公众号获取openid
8、因是网页获取,故点此链接进入获取用户openid的api,如下图
9、点击链接,来到了微信公众号网页授权获取用户基本信息;初步一看,一堆堆的说明,怎么搞啊,头大了。不用担心,一步一句看下去,到最后,你会发现获取openid有两种不同的方式:
- 静默授权(用户无感知)
- 感知授权(需用户授权)
10、为了提升用户体验,初步决定使用静默授权方式。
11、浏览完该api说明,可以得到静默授权方式获取到微信用户的openid获取步骤。
- 1).引导用户访问链接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
- 2).通过code换取access_token和openid
- (上述链接的参数说明,可以参考接微信的接口文档)
12、那么问题又来了,如何测试-请看下篇~