亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权
第一篇中将一些坑说明,那么这篇开始正式进入接入步骤。具体的参数说明,我不会列出,毕竟微信官方文档都有,我想大家都看的懂,而且这接口也有可能微信会变动,所以不列出来,也是不想引起大家的误解,接入步骤只起一个抛砖引玉的作用。
接入步骤
获取OpenId和授权。首先聊一下OpenId,这个东西相当于一个用户id,只是,它并不是用户的微信号,也不是用户在微信后台的标识(至少不全是)。openid是当用户,经过授权后,相对于某个公众号的用户标识。换句话说,同样的用户,对于不同的公众号,其openid是不一样的。
当然,微信也可以使同一用户,在不同公众号下产生相同的openid,这个我们暂时不讨论
其次,access_token,这是一个相当于授权凭证的东西,好比,你只有拿着这个凭证去找微信的人(API)办事,没有这个凭证,根本没人鸟你(很有官僚脾气啊)。
(一)申请公众号支付
这个步骤就不多废话了,首先当然要申请公众号,认证,然后申请开通支付,开通登录获取获取用户授权等
-
在下图示例中,配置域名
图2中,需在网页授权域名处填写回调网页地址所在的域名,微信的解释是“用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下”。也就是说,我们提供给微信的URL(下面第二步中的URL),必须在这个域名下,否则是不能成功的。 -
设置js安全回调域
同样,上图中的JS接口安全域名中要填写我们的域名地址,微信的解释为“设置JS接口安全域名后,公众号开发者可在该域名下调用微信开放的JS接口”。也就是说,我们调用微信API的页面,必须位于此处填写的JS接口安全域名中的域名下 -
获取公众号id(也是后面要用的appid),公众号密钥(后面所说的appscret)
- 配置支付授权目录,微信的说明是“所有使用公众号支付方式发起支付请求的链接地址,都必须在支付授权目录之下”。意思和2中类似,意思是微信向我们推送支付结果的,由我们提供的回调页面地址必须在此处填写的域名下。
(二)获取OpenId
-
首先获取code,微信给出了前述第二个地址
只需将上述连接中的AppID填公众号id,URL填我们自己的网页地址,该地址是让微信将结果以http方式返回给我们的地址,必须要在第一步配置的域名下,比如,如果我们的域名是www.domain.com,那么我们的网页地址必须在这个域名的目录下,一级,二级目录都可以
这里使用什么方式来访问该连接视具体项目,但重要的是获得这个http请求的返回,如果成功请求,code会作为参数,添加在我们提供的url后,返回给我们。比如我们的url是www.domain.com/default,那么如果我们请求成功,微信会在该地址后加上参数,www.domain.com/default?code=Code,回调我们的接口,我们的接口所要做的就是获取并处理这个code
需要提的一点,scope这个参数在微信文档中说明,如果只是获得基本的授权,使用snsapi_base,如果要获取用户信息,要使用snsapi_userinfo
-
使用code来获得access_token和openId
同样APPID填公众号ID,SECRET填公众号的密钥,具体可以在我们的公众号账号中查看获得,而code就是先前我们获得的code。同样,这里是使用POST的方式来获取http请求的返回值。其中包含openid,和access_token
我们的业务逻辑,必须妥善保存和处理openid,和access_token,因为后续的接口(不一定是支付接口)可能会用到。
到这一步为止,我们已经通过了oauth2.0的授权,我们拿到了一个指代用户标识的openid,并且拿到了一个access_token,有了这个token,就相当于我们被微信后台认可,有权限调用微信相关接口。
注意,此处的access_token是对应于每一个不同的用户的。微信中称之为网页授权类型access_token,需要用户授权之后才能拿到。
具体请看我的第一篇文章
亲历H5移动端游戏微信支付接入及那些坑(一)——支付方式与坑
另附上微信关系access_token的文档地址