H5页面获取openid,完成支付公众号(未关注公众号)支付
一、页面授权
// 进入页面获取权限code
function initAuthorizeCode() {
var appid = $("#appid").val();//公众号appid
var openid = $("#openId").val();//openid
var userId = $("#userId").val();
var code = getUrlParam('code');
var local = window.location.href;
var hrefurl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri="+encodeURIComponent(local)+"&response_type=code&scope=snsapi_base&state=dcabe11a-751f-490f-9dcc-606881c6fcdb#wechat_redirect";
var localopenid = localStorage.getItem("loginStorageKey"+userId);
if((code==null || code == "")&&(openid==null||openid==""||openid=="null")){
window.location.href = hrefurl;
// window.location.replace(hrefurl);
}else{
// var localopenid = localStorage.getItem("loginStorageKey"+userId);
if(openid==undefined || openid=="" || openid==null|| openid=="null"||openid=="undefined"){
console.info(code);
$.ajax({
url: basePath+'loginController/getOpenId',
type:'post',
dataType:'json',
data:{code:code},
async:false,
success:function(result){
console.info(result);
localStorage.setItem("loginStorageKey"+userId,result.openid);
result = true;
},
error:function(msg){
console.info(msg);
},
});
} }
}
二、通过code获取openid
@RequestMapping(value = "/getOpenId")
public @ResponseBody String getOpenId(HttpServletRequest request) {
Map<String, Object> maps = new HashMap<String, Object>();
maps.put("succ", true);
maps.put("msg", "success");
String code = request.getParameter("code");
String openId = (String) request.getSession().getAttribute("wx_user_openid");
try {
// 调用查询接口 如果还是失败返回失败页面
WxOauthLogin wxAuth = new WxOauthLogin();
String url = wxAuth.getAccessTokenUrl(code); log.info("获取用户openid请求参数 result param:{}", url); URL urlObject = new URL(url);
HttpURLConnection urlConnection = (HttpURLConnection) urlObject.openConnection(); // 将返回的输入流转换成字符串
InputStream inputStream = urlConnection.getInputStream(); // 指定编码格式
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader in = new BufferedReader(inputStreamReader);
String jsonUserStr = in.readLine().toString(); // 释放资源
inputStream.close();
inputStream = null;
urlConnection.disconnect(); log.info("通过code换取网页授权access_token result:{}", jsonUserStr);
if (jsonUserStr != null) {
Map<String, String> resultmap = Json.toObject(jsonUserStr, Map.class);
if (StringUtil.empty(resultmap.get("openid"))) {
log.error("获取openid失败");
maps.put("succ", false);
maps.put("msg", "获取openid失败");
} else {
maps.put("openid", resultmap.get("openid"));
maps.put("unionid", resultmap.get("unionid"));
// 将openId放到缓存
if(ObjectUtils.isEmpty(openId)){
openId = resultmap.get("openid");
request.getSession().setAttribute("wx_user_openid", openId);
maps.put("openid", openId);
}
}
}
} catch (Exception e) {
log.error("获取openid失败");
maps.put("succ", false);
maps.put("msg", "获取openid失败");
}
log.info("获取用户openid执行结果:{}",Json.toJson(maps));
return Json.toJson(maps);
// return openId; }
三、根据code获取openid
public String getAccessTokenUrl(String code) {
// ?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
StringBuffer url = new StringBuffer("https://api.weixin.qq.com/sns/oauth2/access_token");
url.append("?appid=" + wxResourceProp.getAppid());
url.append("&secret=" + wxResourceProp.getAppsecret());
url.append("&code=" + code);
url.append("&grant_type=authorization_code");
return url.toString();
}
至此未关注公众号的微信用,可以用jsapi支付方式支付公众号里的订单。
H5页面获取openid,完成支付公众号(未关注公众号)支付的更多相关文章
- 微信网页授权-公众号支付(获取openid、用户信息等)
名词解释: openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID 业务功能描述:实现H5页面可以在微信浏览器里面进行微信支付,所以需要 ...
- 微信公众号授权回调用户信息,获取openid
1.--------------------用户授权登录并获取code 授权登录方式有两个,一种为静默授权登录(scope=snsapi_base),一种为非静默授权登录(scope=snsapi_u ...
- 微信测试号开发之九 微信网页授权:页面获取用户openid
原文链接:https://blog.csdn.net/qq_37936542/article/details/78981369 一:配置接口 注意:这里填写的是域名(是一个字符串),而不是URL,因此 ...
- Java微信公众平台开发之公众号支付(微信内H5调起支付)
官方文档点击查看准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败)借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公 ...
- 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权
第一篇中将一些坑说明,那么这篇开始正式进入接入步骤.具体的参数说明,我不会列出,毕竟微信官方文档都有,我想大家都看的懂,而且这接口也有可能微信会变动,所以不列出来,也是不想引起大家的误解,接入步骤只起 ...
- 公众号H5页面接入微信登录流程
公众号H5页面接入微信登录流程 源码地址 https://gitee.com/szxio/h5_weixin 起步 首先创建一个项目,我们采用uni-app来作为我们的前端框架 环境安装 全局安装vu ...
- 微信H5页面内实现一键关注公众号
H5页面内实现关注公众号的微信JSSDK没有相关接口开放,因此就得动点脑筋来实现该功能了.下面的方法就是通过一种非常蹊跷的方式实现的. 首先,需要在公众号内发表一篇原创文章,注意是原创文章,然后由另一 ...
- 微信公众号之获取openId
在小伙伴们开发微信公众号.小程序或者是在微信内置浏览器打开的项目时,会遇到的第一个问题就是如何获取openId,今天小编就给大家带来的是如何获取openId. 首先 我们要从微信开发者后台得到ap ...
- H5页面怎么跳转到公众号主页?看过来
前言: 做公众号开发的小伙伴,可能会遇到这种需求: 在一个H5页面点击一个关注公众号按钮跳转到公众号主页. 听到这个需求的一瞬间,疑惑了!这不可能! 摸了摸高亮的额头!没办法,做还是要做的 开始上解决 ...
随机推荐
- HeyWeGo第四周项目总结
HeyWeGo第四周项目总结 项目内容 使用java程序开发一款扫雷游戏 游戏项目规划: 确定游戏中方块格子的个数 确定游戏中地雷的个数(初始10个),完成布雷 计算每个方块周围的雷数,在方块周围本身 ...
- VMware Vcenter Server 6.0忘记密码
windows 版Vcenter6.0 重置密码首先要登录到安装Vcenter的windows服务器上 用管理员身份打开CMD命令行 进入VMware VCenter的目录 默认是C:\Program ...
- [kata] Playing with digits
package kata_011; /** * Some numbers have funny properties. For example: * * 89 --> 8¹ + 9² = 89 ...
- 如何优雅地发布Hexo博客
前言 就目前而言,我所知道的发布Hexo的博客有如下几种: 1.原始方式,也就是在服务器上编写md文件,然后利用hexo g来生成,详见:hexo从零开始到搭建完整: 2.利用github+hook来 ...
- Java IO流-序列化流和反序列化流
2017-11-05 20:42:06 序列化流:把对象按照流的方式存入文本文件或者在网络中传输. 对象 -- 流数据(ObjectOutputStream) 反序列化流:把文本文件中的流对象数据或者 ...
- linux hosts.equiv设置解析
hosts.equiv文件的用途与格式 一. hosts.equiv 文件的用途 /etc/hosts.equiv 和 $HOME/.rhosts 定义了哪些计算机和用户可以不用提供口令就在本地计算机 ...
- 素数对猜想之python3实现
题目 让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数.显然有d1=1,且对于n>1有dn是偶数.“素数对猜想”认为“存在无穷多对相邻且差为 ...
- zoj2314
题解: 有上限的网络流 基本模板 代码: #include<bits/stdc++.h> using namespace std; ; int ne[N],num,n,m,d[N],S,T ...
- delphi文件操作的总结
csfinal90我的:收件箱资源博客空间设置|帮助|退出 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 windzb的专栏 目录视图 摘要视图 订阅 IT俱乐部创始人杜鸿飞专访 ...
- 在jenkins和sonar中集成jacoco(二)--在jenkins中生成jacoco覆盖率报告
先要在jenkins上安装jacoco的插件,安装完成之后在job的配置项中可以增加这个选项: 第一个录入框是你的覆盖率文件(exec),第二个是class文件目录,第三个是源代码文件目录. 配置好了 ...