本文主要和大家分享微信支付之公众号支付详解,随着微信支付的流行,大多产品都开发了自己的公众号、小程序等,产品的营销需要支付的支撑,最近做了个微信公号号支付,采坑无数,今天给大家分享一下,希望能帮助到大家。

可以先看一下微信支付API文档

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

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

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317853&token=&lang=zh_CN

建议先看一下微信的开发者文档,虽然有点坑 。。。。

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

应用场景


所需jar包

<!-- 微信支付需要的jar包 --> <dependency> <groupId>xmlpull</groupId> <artifactId>xmlpull</artifactId> <version>1.1.3.1</version> </dependency> <dependency> <groupId>xpp3</groupId> <artifactId>xpp3</artifactId> <version>1.1.4c</version> </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.7</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>fluent-hc</artifactId> <version>4.3.5</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.5</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient-cache</artifactId> <version>4.3.5</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.3.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.3.5</version> </dependency>

公众号支付所需参数

public class WeixinMatchPayConfigure { /** * 域名 项目域名,根据需求自行配置 */ public static final String ROOTURL = WeixinPayConfigure.ROOTURL; /** * 订单域名 项目域名,根据需求自行配置 */ public static final String ORDER_ROOTURL = WeixinPayConfigure.ORDER_ROOTURL; /** * 赛事 域名 项目域名,根据需求自行配置 */ public static final String MATCHURL = ""; /** * 公共账号id 必填 (18位数↓) */ public static final String APPID = WeixinPayConfigure.APPID; /** * 商户id 商户账号 必填 */ public static final String MCH_ID = "11111111"; /** * 应用秘钥 必填(可在微信商户平台上查找) */ public static final String APP_SECRET = "fd87878fsf87fsf8cvsd8"; /**API秘钥*/ 必填(可在微信商户平台上查找) public static final String API_KEY = "fsdfn23482njdvjw23455555"; /** * 统一下单URL 微信官方提供 */ public static final String PAY_UNIFIED_ORDER_API = "https://api.mch.weixin.qq.com/pay/unifiedorder"; /** * 微信公众号交易类型 (扫码支付类型:NATIVE,公众号支付类型:JSAPI) */ public static final String TRADE_TYPE = "JSAPI"; /** * 获取code的回调地址 你项目要展示的首页路径 */ public static final String REDIRECT_URI = ""; /**微信H5支付结果通知页*/ public static final String NOTIFY_URL = ROOTURL + "/api/pay/weixin/notify.html"; /** * 不弹出授权页面,直接跳转,只能获取用户openid */ public static final String SCOPE = "snsapi_base"; /** * 弹出授权页面,需要用户确认,可以获取用户的较多信息 */ public static final String USERINFOSCOPE = "snsapi_userinfo"; /** * 获取微信code的url(登录授权) */ public static final String GET_CODE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect"; /** * 获取用户的OpenId的url(必须先获得code之后调用) */ public static final String GET_OPENID_URL = "https://api.weixin.qq.com/sns/oauth2/access_token"; /** * 微信支付成功之后的回调 */ public static final String NOTIFY_ACTIVITY_URL = WeixinPayConfigure.ORDER_ROOTURL + "/pay/wxnotify.json"; }

获取微信用户的openId

大致步骤:获取用户授权(获取code)------------->根据code获取openID(用户的基本信息)

1、配置授权域

这个则是在公众号登陆平台上面配置的↓

微信支付之公众号支付详解-php教程-PHP中文网


2、发起API请求获取用户授权

URL:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

需要拼接三个参数:APPID、REDIRECT_URI、SCOPE,代码如下:

//项目入口,如果这个项目是在公众号中,那么公众号菜单下面配置的就是这个接口的路径↓ @At @Ok("jsp:match.entrance") @NotSso public Object entrance() { String codeUrl = WeiXinApiUrlUtil.getMatchUrl(); return codeUrl; } public static String getMatchUrl() { String url = WeixinMatchPayConfigure.GET_CODE_URL; url = url.replace("APPID", urlEnodeUTF8(WeixinMatchPayConfigure.APPID)); url = url.replace("REDIRECT_URI", WeixinMatchPayConfigure.REDIRECT_URI); url = url.replace("SCOPE", WeixinMatchPayConfigure.USERINFOSCOPE); return url; }返回前端的是个Url路径,同个这个路径来获取微信用户授权,然后跳转我们自己的首页(REDIRECT_URI) 前端页面 <script type="text/javascript"> $(document).ready(function(){ //其实这个时候跳转的URL它会跟着一连串属性,入下图 ↓ window.location.href='${obj}'; }); </script>

3、微信用户openId是什么?