一、页面授权

  

// 进入页面获取权限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,完成支付公众号(未关注公众号)支付的更多相关文章

  1. 微信网页授权-公众号支付(获取openid、用户信息等)

    名词解释: openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID 业务功能描述:实现H5页面可以在微信浏览器里面进行微信支付,所以需要 ...

  2. 微信公众号授权回调用户信息,获取openid

    1.--------------------用户授权登录并获取code 授权登录方式有两个,一种为静默授权登录(scope=snsapi_base),一种为非静默授权登录(scope=snsapi_u ...

  3. 微信测试号开发之九 微信网页授权:页面获取用户openid

    原文链接:https://blog.csdn.net/qq_37936542/article/details/78981369 一:配置接口 注意:这里填写的是域名(是一个字符串),而不是URL,因此 ...

  4. Java微信公众平台开发之公众号支付(微信内H5调起支付)

    官方文档点击查看准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败)借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公 ...

  5. 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权

    第一篇中将一些坑说明,那么这篇开始正式进入接入步骤.具体的参数说明,我不会列出,毕竟微信官方文档都有,我想大家都看的懂,而且这接口也有可能微信会变动,所以不列出来,也是不想引起大家的误解,接入步骤只起 ...

  6. 公众号H5页面接入微信登录流程

    公众号H5页面接入微信登录流程 源码地址 https://gitee.com/szxio/h5_weixin 起步 首先创建一个项目,我们采用uni-app来作为我们的前端框架 环境安装 全局安装vu ...

  7. 微信H5页面内实现一键关注公众号

    H5页面内实现关注公众号的微信JSSDK没有相关接口开放,因此就得动点脑筋来实现该功能了.下面的方法就是通过一种非常蹊跷的方式实现的. 首先,需要在公众号内发表一篇原创文章,注意是原创文章,然后由另一 ...

  8. 微信公众号之获取openId

    在小伙伴们开发微信公众号.小程序或者是在微信内置浏览器打开的项目时,会遇到的第一个问题就是如何获取openId,今天小编就给大家带来的是如何获取openId. 首先   我们要从微信开发者后台得到ap ...

  9. H5页面怎么跳转到公众号主页?看过来

    前言: 做公众号开发的小伙伴,可能会遇到这种需求: 在一个H5页面点击一个关注公众号按钮跳转到公众号主页. 听到这个需求的一瞬间,疑惑了!这不可能! 摸了摸高亮的额头!没办法,做还是要做的 开始上解决 ...

随机推荐

  1. 试着用React写项目-利用styled-components解决样式问题

    转载请注明出处:王亟亟的大牛之路 啰嗦之前先安利,会渐渐丰富前端的知识点 https://github.com/ddwhan0123/Useful-Open-Source-Android 昨天用web ...

  2. 解决 docker: Error response from daemon: ... : net/http: TLS handshake timeout.

    参考:解决 Docker pull 出现的net/http: TLS handshake timeout 的一个办法 问题: 执行 $ sudo docker run hello-world 时出现: ...

  3. 51Nod 1503 猪和回文

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1503 思路: 没想到要用DP去解决. 题目是从起点出发走,我们可以从起点 ...

  4. R中的路径设置

    软件的路径设置对于电脑的内存管理和自己的寻根究底十分重要.所以,合理的设置R中相关路径,能更加方便快捷的管理自己的相关文件,提高学习R语言的效率,建立自己的习惯体系. R中的路径设置主要有以下几个方面 ...

  5. shell fold限制文件行宽

    将文本的行限制到特定的宽 这个用 echo 命令发送的文本用 -w 选项分解成块. 在这个例子中,我们设定了行宽为12个字符. 如果没有字符设置,默认是80. 增加的 -s 选项将让 fold 分解到 ...

  6. vue 2.5.14以上版本render函数不支持返回字符串

    vue 2.5.14以上版本render函数不再支持直接返回字符串,必须返回数组或vnode节点,如果返回字符串的话,渲染为空.详情可见源码. function createFunctionalCom ...

  7. 树状数组 Binary Indexed Tree/Fenwick Tree

    2018-03-25 17:29:29 树状数组是一个比较小众的数据结构,主要应用领域是快速的对mutable array进行区间求和. 对于一般的一维情况下的区间和问题,一般有以下两种解法: 1)D ...

  8. Ant是什么

    Ant是什么? 一.总结 一句话总结: 编译 打包 测试 工具 xml Ant是Java的生成工具,是Apache的核心项目: Ant类似于Unix中的Make工具,都是用来编译.生成: Ant是跨平 ...

  9. TVD$XTAT在linux下安装使用详解

    扩展跟踪文件分析工具 (TVD$XTAT)是个命令行工具.和TKPROF一样,主要目的是把原始跟踪文件作为输入内容生成一个格式化的文件作为输出内容.输出文件可以是HTML或是文本文件.界面非常友好,推 ...

  10. java基础第6天

    面向对象 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高.可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始改进,能不能把这些步骤和功能再进行封装,封装时根据不 ...