说在前面的话
关于微信公众号的项目也已经告落一段时间了,但是项目结束后又有参加了新的项目,导致一直没有时间分享项目经验,今天正好得空来分享一下本项目,本项目主要用到了微信公众号开发,百度地图api等,具体技术如下
- 微信授权登录
- 微信获取用户定位
- 百度地图批量计算两点直接距离(驾车距离)
- 模板消息推送
- 微信支付
- 微信退款
- 微信内嵌地图
- 经纬度转换及逆转换
微信授权登录
1、微信授权登录的有点和缺点
没有接触过微信授权登录的小伙伴可能会问什么是微信授权登录,其实微信授权登录就是不需要用户输入用户名和密码,直接就可以登录该平台,从而获取到唯一标识符来获取个人信息。
- 优点:不需要用户再输入用户名以及密码 直接就可以登录
- 缺点:必须在微信里使用才可以
2、准备微信授权登录(*)
左侧开发——>基本配置中查询微信AppID,AppSecret。

微信授权登录时必须要用自己的微信AppID,AppSecret。
白名单也需要进行配置。

还有设置——公众号设置中配置业务域名,js接口安全域名,网页授权域名。

- 业务域名:这个其实不是太重要,不配置它也可以正常运行项目,但是会在网页上端提示红色框框,表示这个网址可能存在防欺诈盗号。

- js接口安全域名
这个借口就比较重要了,因为如果你不配置这个域名的话,当你网页中需要获取用户定位等JS的组件时,就会出现错误信息。

- 网页授权域名
最重要的一部分,如果没有设置该域名的话,在用户登录时会报错显示非法请求或者是域名未获得权限等

注意,在配置之前需要将它的文件下载到自己的服务器上,需要让微信能访问到您的项目,比如你的项目是http://www.xiaofeng88.cn/wxtest,将文件放在该项目的根目录那么你必须在域名里直接写该域名+项目名,也就是填写http://www.xiaofeng88.cn/wxtest。这样就可以配置成功了。
如果您是新手,并没有微信公众号,这里微信也提供登录测试号,在测试号里可以登录申请,测试号不需要配置白名单,比正式号简单一些。具体不再论述。

开发
开发四步走策略
- 第一步:用户同意授权,获取code
第一步需要用户点击同意我们才可以进行下一步操作,因此我们刚开始的链接需要引导用户去点击授权登录,在请求时您会给微信发送请求,请求中有一个参数是redirect_uri,然后微信会把这个code发送到这个地址上,所以这个地址我这边建议是后端的地址,接受到微信的请求后可以获取code参数。
参数如下:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
参数介绍:
appid=APPID :就是微信的唯一AppId
redirect_uri=REDIRECT_URI :你自定义的微信发送给你的code地址。你需要用这个uri服务去接收微信发来的code。(这个地址需要你用encode转义)
response_type=code:不变化
scope=SCOPE :snsapi_base 静默方式登录 snsapi_userinfo用户详细信息,需要用户点击授权
state=STATE:DEFAULT
所以如果你想静默登录的话就
https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的appid填写处&redirect_uri=你获取code的地址&response_type=code&scope=snsapi_base&state=DEFAULT#wechat_redirect
- 第二步:通过code换取网页授权access_token
获取code后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
获取的代码如下:
if (StringUtils.isEmpty(code)) {
throw new IllegalArgumentException("code can't be null or empty");
}
//拼接参数
String param = "?appid=" + weixin.getAppId() + "&secret=" + weixin.getSecret() + "&code=" + code + "&grant_type=authorization_code";
//创建请求对象
HttpsClient http = new HttpsClient();
//调用获取access_token接口
Response res = http.get("https://api.weixin.qq.com/sns/oauth2/access_token" + param);
//根据请求结果判定,是否验证成功
JSONObject jsonObj = res.asJSONObject();
if (jsonObj == null) {
return null;
}
if (Configuration.isDebug()) {
System.out.println("getSnsOAuth2AccessToken返回json:" + jsonObj.toString());
}
Object errcode = jsonObj.get("errcode");
if (errcode != null) {
//返回异常信息
throw new WeixinException(getCause(jsonObj.getIntValue("errcode")));
}
return new SnsAccessToken(jsonObj);
这里我说一下 我使用了是weixin4J的sdk,下载地址
9479

被折叠的 条评论
为什么被折叠?



