浅析微信支付:微信公众号网页授权

17 篇文章 5 订阅
订阅专栏
16 篇文章 3 订阅
订阅专栏
16 篇文章 2 订阅
订阅专栏

本文是【浅析微信支付】系列文章的第四篇,主要讲解微信支付前如何获取获取网页授权及用户信息获取。


浅析微信支付系列已经更新三篇了哟~,没有看过的朋友们可以看一下哦。

浅析微信支付:开发前的准备

浅析微信支付:前篇大纲

浅析微信支付:微信支付简单介绍(小程序、公众号、App、H5)

1、开发前的准备

首先,如果没有看过本系列 浅析微信支付:开发前的准备 的朋友需要看一下这篇文章,链接在上方;本文需要用到开发前准备中的几个知识点:设置安全、设置白名单、得到公众号一系列信息(appid\apiKey等);如果需要在本地开发测试,还需要下载 微信开发者工具微信公众平台接口测试帐号

下面我们开始进入开发阶段。

2、设置测试号相关信息

因为项目在开发阶段的时候,需要本地调试,所以需要使用测试号来验证代码是否正确,所以下面会讲如何设置测试号相关配置;

首先我们进入 微信公众平台接口测试帐号申请 页面,点击登录即可使用微信账号登录(一个微信号只有一个测试号)。

登录后可以进入测试号管理界面,如下:

微信测试号-1

微信测试号-2
微信测试号-3
微信测试号-4

按要求设置上方图片中的配置,即可减少80%的问题,如果调用时还有其他问题,请到文末添加作为微信,可进入讨论群和大家一起交流。

3、获取微信网页授权

使用以下代码获取微信网页授权:

微信官方js文件:

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js" type="text/javascript"></script>

封装的微信工具文件weixin_util.js

<script type="text/javascript">

// 微信默认设置配置方法
function weixinConfig(appid, timestamp, noncestr, signature) {
	wx.config({
		debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        // debug : true, 
		appId :appid, // 必填,公众号的唯一标识
		timestamp : timestamp, // 必填,生成签名的时间戳
		nonceStr : noncestr, // 必填,生成签名的随机串
		signature : signature,// 必填,签名,见附录1
        jsApiList: [
            'checkJsApi',
            'onMenuShareTimeline',
            'onMenuShareAppMessage',
            'onMenuShareQQ',
            'onMenuShareWeibo',
            'hideMenuItems',
            'showMenuItems',
            'hideAllNonBaseMenuItem',
            'showAllNonBaseMenuItem',
            'chooseWXPay',
		]
		// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
	});
}

// 获取用户的openid
function getBaseInfo(userId, state){
    if (userId === '') {
        //1.获取到code
        $appid="xxx";
        $redirect_uri=encodeURI("http://127.0.0.1:8888/weixin/auth/authorize.do");//这里的地址需要http://
        $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+$appid+"&redirect_uri="+$redirect_uri+"&response_type=code&scope=snsapi_userinfo&state=" + state + "#wechat_redirect";
        window.location.href = $url;
    }
}
</script>

调用微信config方法并获取网页授权:

<script type="text/javascript">

    // 微信功能配置
    weixinConfig('${appid}',${timestamp},'${noncestr}','${signature}');

    // 用户授权登陆
    getBaseInfo('${(userId)}' ,'redirect_uri');

</script>

如果访问页面路径,得到以下显示,就已经成功获取网页授权,其他均为失败:
微信网页授权-1

如果出现其他错误,需要检查一下第一步时设置的路径安全接口、域名是否正确,开启weixinConfig中的debug模式,看是否为没有正确设置功能模块;如果还不能解决,请到文末看楼主上一篇文章或者添加作者进群即可。

4、获取微信用户信息

这里说一下上面获取用户授权的具体参数:

第一步,获取config需要的基础参数:

/**
 * 根据appid获取wx.config需要的基础参数
 * @param reqMap requestUrl 请求页面地址、appid appid
 * @return json
 *
 * @author yclimb
 * @date 2018/9/25
 */
@ApiOperation(value = "微信公众号|config需要的基础参数", httpMethod = "POST", notes = "config需要的基础参数")
@PostMapping("/getSignature")
public AppMessage getSignature(@RequestBody Map<String, String> reqMap) {
    Map<String, Object> map = Maps.newHashMap();
    switch (reqMap.get("appid")) {
        case WXPayConstants.APP_ID:
            map = wxUtils.getSignature(reqMap.get("requestUrl"), reqMap.get("appid"), BaseConstants.WX_MINI_PROGRAM_YUEDIAN_CODE);
            break;
        case WXPayConstants.APP_ID_CHUNBO:
            map = wxUtils.getSignature(reqMap.get("requestUrl"), reqMap.get("appid"), BaseConstants.WX_CHUNBO_JSAPI_YUEDIAN_CODE);
            break;
    }
    return AppMessage.success(map);
}

第二部分:获取用户授权的基础信息:

// 这里的appid就是咋们测试号的appid
$appid="xxx";

// 这里的地址需要http://且必须encodeURI,此地址为获取用户信息后,微信自动转发的服务器端接口,用来接收微信的授权code,在后端处理而得到用户基本信息
$redirect_uri=encodeURI("http://127.0.0.1:8888/weixin/auth/authorize.do");

// 微信官方的授权接口
$url="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+$appid+"&redirect_uri="+$redirect_uri+"&response_type=code&scope=snsapi_userinfo&state=" + state + "#wechat_redirect";

// state可以用来区分特殊参数和配置

具体可见微信官方文档,文档如下: 微信网页授权接口

以上为js页面处理,下面我们来具体讲解 redirect_uri 这个接口中需要处理的逻辑;

WXAuthController

/**
 * 微信网页授权
 * https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
 * 第一步:用户同意授权,获取code
 * 第二步:通过code换取网页授权access_token
 * @return str
 *
 * @author yclimb
 * @date 2018/7/30
 */
@ApiOperation(value = "微信用户|网页授权", httpMethod = "GET", notes = "获取前端微信用户的网页授权,得到用户基础信息")
@GetMapping("/authorize")
public AppMessage authorize(HttpServletRequest request) {

    // 跳转页面标识
    String state = request.getParameter("state");
    // 通过code获取access_token
    String code = request.getParameter("code");
    log.info("authorize:code:{}", code);

    String appid;
    String secret;
    
    // 根据不同的state得到不同的微信公众号网页授权
    switch (state) {
        case STATE_ASYD:
            appid = WXPayConstants.APP_ID_ASYD;
            secret = WXPayConstants.SECRET_ASYD;
            break;
        default:
            appid = WXPayConstants.APP_ID_CHUNBO;
            secret = WXPayConstants.SECRET_CHUNBO;
            break;
    }

    // 获取access_token和openid
    JSONObject jsonToken = wxUtils.getJsapiAccessTokenByCode(code, appid, secret);
    if (null == jsonToken) {
        return AppMessage.error(-2);
    }

    return AppMessage.success(jsonToken);
}

WXUtils


/**
 * 网页授权获取用户信息时用于获取access_token以及openid
 * 请求路径:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code(最后一个参数不变)
 *
 * @param code c
 * @return access_token json obj
 * @author yclimb
 * @date 2018/7/30
 */
public JSONObject getJsapiAccessTokenByCode(String code, String appid, String secret) {
    if (StringUtils.isBlank(code)) {
        return null;
    }
    try {
        // 获取access_token
        String access_token_json = restTemplate.getForObject(WeChatURL.OAUTH_ACCESS_TOKEN_URL, String.class, appid, secret, code);
        logger.info("getJsapiAccessTokenByCode:access_token_json:{}", access_token_json);
        if (StringUtils.isBlank(access_token_json)) {
            return null;
        }
        JSONObject jsonObject = JSON.parseObject(access_token_json);
        if (StringUtils.isBlank(jsonObject.getString("access_token"))) {
            return null;
        }
        return jsonObject;
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
    }
    return null;
}

使用以上方法就可以得到微信用户的基础咯~,上面是作者已经封装好的sdk方法,具体的源码请见文末源码地址。

如果用户已经授权,第二次进入网页,这时候不需要再次授权,作者也提供了另一种获取用户信息的方法,通过access_token和openid请求获取用户信息,代码如下:

/**
 * 通过access_token和openid请求获取用户信息
 * @return str
 *
 * @author yclimb
 * @date 2018/9/17
 */
@ApiOperation(value = "微信用户|通过access_token和openid请求获取用户信息", httpMethod = "POST", notes = "通过access_token和openid请求获取用户信息")
@PostMapping("/getXxxUser/{access_token}/{openid}")
public AppMessage getXxxUser(@PathVariable String access_token, @PathVariable String openid) {

    // 通过access_token和openid请求获取用户信息
    JSONObject jsonUserinfo = wxUtils.getJsapiUserinfo(access_token, openid);
    if (null == jsonUserinfo) {
        return AppMessage.error(-2);
    }

    // 判断用户是否在悦店系统中是一个用户
    String unionid = jsonUserinfo.getString("unionid");
    if (StringUtils.isBlank(unionid)) {
        return AppMessage.error(61008);
    }

    // 存储用户信息到数据库
    
    // 用户名称解码
    user.setNickName(UserNickUtil.decodeNickName(user.getNickName()));
    
    return AppMessage.success(user);
}

结语

根据以上步骤实现,就可以完成微信授权-用户信息获取等操作,如果有问题,欢迎小伙伴随时交流~

预告:下一篇文章,作者将讲 统一下单接口,敬请期待!!!

​如果想要提前一览源码的小伙伴,可以先看看我的 github,地址如下: https://github.com/YClimb/wxpay-sdk/blob/master/README.md

加作者私人微信,作者微信号如下 yclimb,标明 微信支付 可拉入微信支付讨论群与小伙伴一起探讨哦,一定要标明 微信支付 哦~

到此本文就结束了,关注公众号查看更多推送!!!


关注我的公众号


Vue3 - 详细实现公众号 H5 网页授权登录流程及示例代码,申测试公众号全流程及本地调试无需部署上线服务器就能直接调起微信登陆授权页面,第三方web公众号网站做微信登录授权拿到用户手机号昵称头像
王佳斌
08-01 3830
vue3,nuxt3,微信公众号,h5,移动端,vue3微信网页登陆,手机网页,网站,微信登录,微信授权第三方网站登录,微信公众号第三方网页授权登录,利用测试号实现本地调试微信登录授权,本地无法调试怎么办,测试公众号,在开发环境下怎么测试,用项目本地ip地址,流程及逻辑详细教程,OAuth2.0,vue公众号网页授权,vue微信网页授权通过code换取网页授权,redirect_url参数错误,报错,无法调起,如何申测试公众号,微信公众平台测试号的申与使用,微信公众号网站使用vue获取用户openid
浅析微信支付微信支付简单介绍(小程序、公众号、App、H5)
YClimb的专栏
11-01 1153
本文是【浅析微信支付】系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处。 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下。 浅析微信支付:前篇大纲 微信支付是集成在微信客户端的支付功能,用户可以通过手机完成快速的支付流程。微信支付以余额、绑定银行卡的快捷支付为基础,向用户提供安全、快捷、高效的支付服务。 微信支付开通需要申商户平台功能,所以,个人的订阅号是不能开...
项目实战之微信微信公众号登陆和支付调起
学全栈、大前端方向,就找前端早间课
06-30 660
项目实战之微信微信公众号登陆和支付 微信登陆 [ 待更新… ] 微信公众号支付调起方法 [ 更新中… ] 在实战项目中,如何调起微信公众号支付界面,面对小白是一头雾水,面对大佬是游刃有余,调起支付接口免不了遇见各种坑,今天我将遇见所有的坑和大家分享一下,废话不多说,看一段代码: 官方文档: 这样大家能看懂吗,当然还是会有点懵,刚接触确实上手有点难,全看文档是解决不了我们工作中的项目问题;当然,一定要去读懂文档中参数的含义; 1.1、 判断设备和浏览器 通过 navigator.userAg
微信公众号支付开发流程
- PERSIST °
09-23 2113
主要场景为一码付,用户扫码二维码进入商户自己的H5页面,微信扫码调用微信支付,支付宝扫码就调用支付宝进行支付 微信开发文档 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1 有一篇写的比较全的文档,参考 http://www.cnblogs.com/yimiyan/p/5603657.html
vue实现微信网页授权登录
阵雨的博客
01-08 2万+
附:微信官方文档 前言:在用vue做微信公众号网页项目的授权登录中踩过不少坑,在这里记录一下。首在选择由后端做登陆还是前端传token登录的方式上产生了分歧。两种方式在不同的公司里都用过,后端做登陆无非是前端跳转到jsp或者php页面,后端把登录做了在跳转回页面,这种方式前端方便了,但是中途需要跳转多次,很影响体验,所以最终选择了前端传token的方法进行登录。 不想看过程的可以直接往下拉查...
微信公众号程序或微信小程序接入微信支付流程(前后端程序示例)
嘻嘻的博客
04-22 1万+
文章目录微信支付介绍微信公众号程序接入支付微信小程序接入支付微信商户平台配置第一步第二步后端程序统一下单接口退款接口 微信支付介绍   微信公众号程序或微信小程序项目中基本都要有微信支付。支付场景基本就是点击支付,然后手机底部拉起输入微信支付密码弹窗,密码输入正确后,支付完成。但是无论是微信小程序或微信公众号程序都是在后端调用微信api接口进行统一下单,将接口返回数据回传前端拉起支付操作,然后异步通知支付结果的这样一个流程。 微信公众号程序接入支付   如果是微信公众号程序接入微信支付,需要登录微信公众号
浅析微信支付:查询订单和关闭订单
03-29
浅析微信支付微信公众号网页授权 声明:这里的查询订单、关闭订单接口仅适用于 小程序支付、公共号支付、扫码支付、APP支付,刷卡支付方式此处并不适用。 1、查询订单 以下为微信官方的查询订单文档: ...
浅析微信支付:支付结果通知
YClimb的专栏
11-06 7153
本文是【浅析微信支付】系列文章的第六篇,主要讲解支付成功后,微信回调商户支付结果通知的处理。 浅析微信支付系列已经更新五篇了哟~,没有看过的朋友们可以看一下哦。 浅析微信支付:统一下单接口 浅析微信支付微信公众号网页授权 浅析微信支付:开发前的准备 前面一章已经讲了如何调用统一下单接口和调起微信支付窗口,在调用下单接口时,我们会传入 异步接收微信支付结果通知的回调地址,顾名思义这个地址作用...
浅析微信支付:统一下单接口
YClimb的专栏
11-05 1227
本文是【浅析微信支付】系列文章的第五篇,主要讲解如何调用统一下单接口生成预支付单及调起支付页面。 浅析微信支付系列已经更新四篇了哟~,没有看过的朋友们可以看一下哦。 浅析微信支付微信公众号网页授权 浅析微信支付:开发前的准备 上面是本文的前置文章,有前面几篇文章的基础以后看会更加明了,如果已经看过的小伙伴可以忽略。 1、什么是[统一下单接口]? 首我们要明白这个问题,需要行看一下微信的...
浅析微信支付:如何使用沙箱环境测试
YClimb的专栏
11-13 1841
本文是【浅析微信支付】系列文章的第十篇,主要讲解如何使用沙箱环境来测试微信支付浅析微信支付系列已经更新十篇了哟~,没有看过的朋友们可以看一下哦。 浅析微信支付:申退款、退款回调接口、查询退款 浅析微信支付:查询订单和关闭订单 浅析微信支付:支付结果通知 在实际开发中,通常我们都是在开发环境中开发,本地环境也有很多限制,比如:微信支付无法调起、H5链接需要鉴权、支付结果通知需要外网等。 ...
微信h5支付和微信公众号支付demo 下载
10-30
微信外浏览器h5支付,微信公众号支付,别人已经封装好的jar还不错,经过测试可以使用,需要注意的地方看我博客
微信支付包(unity可接入)
03-07
unity微信支付,可以用c#调用jar包中的方法吊起微信支付
Unity微信支付demo
11-18
Unity微信支付,Unity工程项目,仅供学习如需要java端留言
Unity接入微信登录 微信分享 微信支付 支付宝支付
02-25
课程讲解了Unity如何接入微信登录 微信分享 微信支付 支付宝支付
微信支付-公众号支付H5调用支付详解
热门推荐
Andyの笔记
05-11 6万+
最近项目需要微信支付,然后看了下微信公众号支付,,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支付的经验。
unity接入微信支付java代码
TxNet
10-25 1179
微信支付 需要自己打出jar包,供unity调用。 贴出java代码,以作日后参考 WXEntryActivity // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.hnsh.qlmj.wxapi; import...
Android快速实现微信支付(真的!很快!)
安逸猿
05-06 1235
本文为Marno原创,转载说明 转载地址(http://www.jianshu.com/p/c97639279d2e) 如果你已经成功集成了微信登录和分享,那么此文将助你快速集成微信支付,此文基于微信支付SDK3.1.1,也就是目前为止最新的SDK 1)微信官方的集成文档 2)微信官方资源下载 资源下载 不过我相信,即便你看了微信的官方文档,你依然不知道微信支付怎么集成,
微信公众号内调起微信支付
bj123467的博客
06-08 3351
很多业务知识我们要参考微信支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3    首需要在微信支付->开发者配置填写支付授权目录的路径:    如:http://166xj71935.51mypc.cn/index.php/Home/GoodsBuy/pay/order_id/要精确到最后一级目录,并以斜杠
微信小程序安全详解:框架、模块与账户保障
这些功能涉及到微信平台特有的数据存储、二维码生成、网络求以及支付等核心服务,大部分实现代码存储在com.tencent.mm.plugin.appbrand包中。 小程序调用框架通过微信的JSAPI框架实现跨层通信,确保页面逻辑与...
写文章

热门文章

  • Redis设置Key/value的规则定义和注意事项(附工具类) 30540
  • 超实用!!!使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器 18507
  • 浅析微信支付:支付结果通知 7153
  • 【Node.js】安装使用nvm管理nodejs版本 6320
  • Windows Server搭建Tomcat服务器及Java项目应用 5267

分类专栏

  • SpringBoot指南 4篇
  • 【Java利器】JDK5-9新特性解析+代码 5篇
  • 浅析微信支付 16篇
  • 浅析微信支付 16篇
  • server 1篇
  • 设计模式 2篇
  • spring 3篇
  • nodejs 1篇
  • vue 1篇
  • jdk 5篇
  • springboot 4篇
  • maven 1篇
  • redis 1篇
  • java 3篇
  • 浅析微信支付 17篇
  • idea 1篇

最新评论

  • Nacos实战一:架构及部署

    大家一起学编程(python): 确认过眼神,这是一个厉害的人

  • maven-replacer-plugin 静态资源版本号解决方案(css/js等)

    HDU鬼先生: 貌似没有找到对应的插件诶

  • 浅析微信支付:查询订单和关闭订单

    chou_out_man: 你这说了和没说一样 和官方文档是一样的

  • 超实用!!!使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器

    newObjects: 为什么我的是一个war包

  • 超实用!!!使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器

    blank2888: 支持华为云服务器吗

最新文章

  • Nacos实战一:架构及部署
  • 浅析微信支付:开通社交立减金活动、创建立减金及领取使用的相关文档和源码
  • 超实用!!!使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器
2021年1篇
2018年33篇
2017年6篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司南通网站优化推广方案北京电子网站优化质量保障深圳低价餐饮行业网站优化北京企业网站优化常见问题街道口网站优化潜江外包网站优化哪家好优化网站软件推选易速达山东正规网站优化排名烟台新站网站优化方案哪个网站优化服务如何济宁网站建设优化技术大型网站打开速度优化如何进行网站推广 网站优化模拟浏览器点击优化网站排名人工网站优化网站建设相关优化四川网站怎么优化网站优化外包哪家公司靠谱铜陵海外网站优化园岭网站优化成功案例浦东新区公司网站优化方案江西网站优化托管案例值得信赖的网站优化代理渠道网站优化哪家关键词多新乡优化网站排名怎样收费淮安网站优化雅安怎么优化自己的网站龙井网站优化排名陕西优化网站广东网站优化代理歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化