博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(十四)SpringBoot开发微信授权支付
阅读量:5241 次
发布时间:2019-06-14

本文共 4707 字,大约阅读时间需要 15 分钟。

前提:配置好域名,在公众号配置

一.引用jar包,在pom.xml文件加入依赖

com.github.binarywang
weixin-java-mp
2.7.0

  

二.在application.yml 加入配置

wechat:  mpAppId: wxd898fcb01713c658  mpAppSecret: 47ccc303338cee6e62894fxxxxxxxxxxx

  mpAppId ,mpAppSecret可以从公众号上取到

三.账户属性值注入

新建一个WechatAccountConfig.java类

package cn.edu.jxnu.config; import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component; import java.util.Map; /** * 微信账号配置 读取属性文件值 *  * @author yux * @version V1.0 * @time 2018年4月13日 */@Data@Component@ConfigurationProperties(prefix = "wechat")public class WechatAccountConfig { 	/**	 * 公众平台id	 */	private String mpAppId; 	/**	 * 公众平台密钥	 */	private String mpAppSecret; 	}

  

四.微信公众号配置

package cn.edu.jxnu.config; import me.chanjar.weixin.mp.api.WxMpConfigStorage;import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;import me.chanjar.weixin.mp.api.WxMpService;import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component; /** * 微信公众平台配置 *  * @author yux * @version V1.0 * @time 2018年4月13日 */@Componentpublic class WechatMpConfig { 	@Autowired	private WechatAccountConfig accountConfig; 	/**	 * 微信公众号服务层 bean注册	 *	 * @time 下午6:08:13	 * @version V1.0	 * @return WxMpService	 */	@Bean	public WxMpService wxMpService() {		WxMpService wxMpService = new WxMpServiceImpl();		wxMpService.setWxMpConfigStorage(wxMpConfigStorage());		return wxMpService;	} 	/**	 * 微信公众号配置 bean注册	 *	 * @time 下午6:08:41	 * @version V1.0	 * @return WxMpConfigStorage	 */	@Bean	public WxMpConfigStorage wxMpConfigStorage() {		WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();		// 设置开发者的id和密钥		wxMpConfigStorage.setAppId(accountConfig.getMpAppId());		wxMpConfigStorage.setSecret(accountConfig.getMpAppSecret());		return wxMpConfigStorage;	}}

  

五.控制器

package cn.edu.jxnu.controller; import java.net.URLEncoder; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam; import cn.edu.jxnu.config.ProjectUrlConfig;import cn.edu.jxnu.enums.ResultEnum;import cn.edu.jxnu.exception.SellException;import lombok.extern.slf4j.Slf4j;import me.chanjar.weixin.common.api.WxConsts;import me.chanjar.weixin.common.exception.WxErrorException;import me.chanjar.weixin.mp.api.WxMpService;import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; /** * 微信授权,使用github的微信sdk *  * @author yx * @version V1.0 * @time 2018年4月17日 */@Controller // 需要重定向的时候不能使用RestController@RequestMapping("/wechat")@Slf4jpublic class WechatController { 	@Autowired	private WxMpService wxMpService; 	//@Autowired	//private WxMpService wxOpenService;  	/**第一步:请求CODE,必要参数return	 * 此方法实现请求授权	 * @time 下午6:17:37	 * @version V1.0	 * @param returnUrl	 * @return 重定向 string	 */	@SuppressWarnings("deprecation")	@GetMapping("/authorize")	public String authorize(@RequestParam("returnUrl") String returnUrl) {		// 1. 配置		// 2. 调用方法		String url = /域名/+/项目名/wechat/userInfo";		// OAUTH2_SCOPE_BASE 默认直接授权		String redirectUrl = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAUTH2_SCOPE_BASE,				URLEncoder.encode(returnUrl));// 重定向到回调接口地址 redirectUrl,必须编码url		log.info("授权:{}", redirectUrl);		return "redirect:" + redirectUrl;	} 	/**第二步:通过code获取access_token	 * 上面的authorize方法重定向到这个方法获取用户信息	 * 用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数	 * @time 下午6:17:59	 * @version V1.0	 * @param code	 * @param returnUrl	 * @return 重定向 string	 */	@GetMapping("/userInfo")	public String userInfo(@RequestParam("code") String code, @RequestParam("state") String returnUrl) {		WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken();		try { //通过code获取access_token			wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);		} catch (WxErrorException e) {			log.error("【微信网页授权】{}", e);			// 继续抛出			throw Exception();		}		// 拿到openid 到这一步重点已经完成		String openId = wxMpOAuth2AccessToken.getOpenId(); 		log.info("获得openid:{}", openId);		// 这个接口前端和后端的开发文档规定的,视情况而定		return "redirect:" + returnUrl + "?openid=" + openId;}}

  

总结:

1、配置开发者id和密钥

2、设置微信回调接口,并在项目中设置,注入

3、注册微信授权bean【 WxMpConfigStorage, WxMpService】 前者是设置配置文件,后者是服务,里面有授权封装

4、编写控制器,

    第一步:请求CODE   【authoeize方法】

    第二步:通过code获取access_token  【userInfo方法】

    第三步:通过access_token调用接口[这一步具体情况看项目]

转载于:https://www.cnblogs.com/yui66/p/9646982.html

你可能感兴趣的文章
unity使用深度优先搜索算法自动生成随机迷宫
查看>>
python全栈开发-Day12 三元表达式、函数递归、匿名函数
查看>>
末公开的存储过程.txt
查看>>
Photoshop剪切板故障修复
查看>>
TCPDF 5.9.195 发布 - PHP PDF 生成工具
查看>>
GFeedLine 2.0.4 发布,社交网络客户端
查看>>
Windows Service 的注册和卸载
查看>>
C#泛型
查看>>
c/s与b/s 动态网站与静态网站 (网站编码统一“UTF-8”)
查看>>
2、SpringBoot整合
查看>>
springboot伪静态
查看>>
接口和抽象类的联系与区别
查看>>
【原创】 Docker 中 运行 ASP.NET Core 站点
查看>>
JS闭包
查看>>
第一次参加比赛的总结
查看>>
javascript中强制类型转换
查看>>
python学习笔记
查看>>
tpl
查看>>
session的简单使用
查看>>
shell 脚本实现的守护进程
查看>>