微信新设备登录请求被拒绝下载微信

825 次阅读
网络请求小程序提供了wx.request, 仔细看一下 api,这不就是n年前的 $.ajax 吗,好古老啊。
// 官方例子
wx.request({
url: 'test.php', //仅为示例,并非真实的接口地址
'content-type': 'application/json' // 默认值
success: function(res) {
console.log(res.data)
小程序支持ES6,那么就应该支持Promise 了,很开心~, 话不多说直接上代码吧
Promise封装
const baseUrl = 'https://api.it120.cc';
const http = ({ url = '', param = {}, ...other } = {}) =& {
wx.showLoading({
title: '请求中,请耐心等待..'
let timeStart = Date.now();
return new Promise((resolve, reject) =& {
wx.request({
url: getUrl(url),
data: param,
'content-type': 'application/json' // 默认值 ,另一种是 "content-type": "application/x-www-form-urlencoded"
complete: (res) =& {
wx.hideLoading();
console.log(`耗时${Date.now() - timeStart}`);
if (res.statusCode &= 200 && res.statusCode & 300) {
resolve(res.data)
reject(res)
const getUrl = (url) =& {
if (url.indexOf('://') == -1) {
url = baseUrl +
return url
// get方法
const _get = (url, param = {}) =& {
return http({
const _post = (url, param = {}) =& {
return http({
method: 'post'
const _put = (url, param = {}) =& {
return http({
method: 'put'
const _delete = (url, param = {}) =& {
return http({
method: 'put'
module.exports = {
const api = require('../../utils/api.js')
// 单个请求
api.get('list').then(res =& {
console.log(res)
}).catch(e =& {
console.log(e)
// 一个页面多个请求
Promise.all([
api.get('list'),
api.get(`detail/${id}`)
]).then(result =& {
console.log(result)
}).catch(e =& {
console.log(e)
做一个应用,肯定避免不了登录操作。用户的个人信息啊,相关的收藏列表等功能都需要用户登录之后才能操作。一般我们使用token做标识。
小程序并没有登录界面,使用的是 wx.login 。 wx.login 会获取到一个 code,拿着该 code 去请求我们的后台会最后返回一个token到小程序这边,保存这个值为 token 每次请求的时候带上这个值。一般还需要把用户的信息带上比如用户微信昵称,微信头像等,这时候就需要使用 wx.getUserInfo ,这里涉及到一个用户授权的问题
带上用户信息就够了嘛? too young too simple!我们的项目不可能只有小程序,相应的微信公众平台可能还有相应的App,我们需要把账号系统打通,让用户在我们的项目中的账户是同一个。这就需要用到微信开放平台提供的 UnionID 。
onLaunch: function () {
console.log('App onLaunch');
var that =
获取商城名称
wx.request({
url: 'https://api.it120.cc/'+ that.globalData.subDomain +'/config/get-value',
key: 'mallName'
success: function(res) {
wx.setStorageSync('mallName', res.data.data.value);
this.login();
this.getUserInfo();
login : function () {
var that =
var token = that.globalData.
// 如果有token
if (token) {
// 检查token是否有效
wx.request({
url: 'https://api.it120.cc/' + that.globalData.subDomain + '/user/check-token',
token: token
success: function (res) {
// 如果token失效了
if (res.data.code != 0) {
that.globalData.token =
that.login(); // 重新登陆
// 【1】调用微信自带登陆
wx.login({
success: function (res) {
// 【2】 拿到code去访问我们的后台换取其他信息
wx.request({
url: 'https://api.it120.cc/'+ that.globalData.subDomain +'/user/wxapp/login',
code: res.code
success: function(res) {
// 如果说这个code失效的
if (res.data.code == 10000) {
that.registerUser();
// 如果返回失败了
if (res.data.code != 0) {
// 登录错误
wx.hideLoading();
// 提示无法登陆
wx.showModal({
title: '提示',
content: '无法登录,请重试',
showCancel:false
// 【3】 如果成功后设置token到本地
that.globalData.token = res.data.data.
// 保存用户信息
wx.setStorage({
key: 'token',
res.data.data.token
// 注册?? [这个看需求]
registerUser: function () {
var that =
wx.login({
success: function (res) {
var code = res. // 微信登录接口返回的 code 参数,下面注册接口需要用到
wx.getUserInfo({
success: function (res) {
var iv = res.
var encryptedData = res.encryptedD
// 下面开始调用注册接口
wx.request({
url: 'https://api.it120.cc/' + that.globalData.subDomain +'/user/wxapp/register/complex',
data: {code:code,encryptedData:encryptedData,iv:iv}, // 设置请求的 参数
success: (res) =&{
wx.hideLoading();
that.login();
// 获取用户信息
getUserInfo:function() {
wx.getUserInfo({
success:(data) =&{
this.globalData.userInfo = data.userI
wx.setStorage({
key: 'userInfo',
data.userInfo
return this.globalData.userI
globalData:{
userInfo:null,
subDomain:"34vu54u7vuiuvc546d",
token: null
getUserInfo: function () {
// 先调用wx.getSetting 获取用户权限设置
wx.getSetting({
success(res) {
console.log('1');
if (!res.authSetting['scope.userInfo']) {
wx.authorize({
scope: 'scope.userInfo',
success() {
// 用户已经同意小程序使用录音功能,后续调用 wx.getUserInfo接口不会弹窗询问
wx.getUserInfo({
success: (data) =& {
this.globalData.userInfo = data.userI
wx.setStorage({
key: 'userInfo',
data: data.userInfo
return this.globalData.userI
console.log(2);
网络请求这块,算目前开发项目中必不可少的一块加油~~
4 收藏&&|&&6
分享到微博?
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。微信开放平台和公众平台的区别
1.公众平台面向的时普通的用户,比如自媒体和媒体,企业官方微信公众账号运营人员使用,当然你所在的团队或者公司有实力去开发一些内容,也可以调用公众平台里面的接口,比如自定义菜单,自动回复,查询功能。目前大多数微信通过认证之后,都在做这个事情。
mp.weixin.qq.com
2.开放平台面向的开发者和第三方独立软件开发商。我觉得开发平台最大的开放就是微信登录。当年腾讯没有花大力气去做统一登录这个事情,导致目前各个网站都要弄一套登录机制。好在他们现在认清了局势。开发者或软件开发商,通过微信开放提供的平台和接口,可以开发适合企业的电子商务网站,扫描二维码进去一个游戏界面,然后去购买商品等。当然后续开放平台要开放支付接口,那么类似口袋通这种软件开发厂商,就可以为大型,中小企业提供微信小店这种服务和软件了。
open.weixin.qq.com
公众平台就是服务号订阅号的管理开发后台。
开发平台说得通俗一点就是实现手机里边安装软件的内容一键分享朋友圈;
下面的第三方登陆就是依托于开放平台(open.weixin.qq.com)的功能
网站应用微信登录是基于构建的微信OAuth2.0授权登录系统。
在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。
授权流程说明
微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。
微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:
  1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
  2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
  3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
获取access_token时序图:
第一步:请求CODE
第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:
若提示&该链接无法访问&,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login。
应用唯一标识
redirect_uri
重定向地址,需要进行UrlEncode
response_type
应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即可
用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数
redirect_uri?code=CODE&state=STATE
若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数
redirect_uri?state=STATE
登录一号店网站应用
打开后,一号店会生成state参数,跳转到
微信用户使用微信扫描二维码并且确认登录后,PC端会跳转到
为了满足网站更定制化的需求,我们还提供了第二种获取code的方式,支持网站将微信登录二维码内嵌到自己页面中,用户使用微信扫码授权后通过JS将code返回给网站。
JS微信登录主要用途:网站希望用户在网站内就能完成登录,无需跳转到微信域下登录后再返回,提升微信登录的流畅性与成功率。 网站内嵌二维码微信登录JS实现办法:
步骤1:在页面中先引入如下JS文件(支持https):
&script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"&&/script&
步骤2:在需要使用微信登录的地方实例以下JS对象:
&&&&&&&&&&&&&&&&&&&&&&&&&&var obj = new WxLogin({
& & & & & & & & & & & & & & & id:"login_container",&
& & & & & & & & & & & & & & & appid: "",&
& & & & & & & & & & & & & & & scope: "",&
& & & & & & & & & & & & & & & redirect_uri: "",
& & & & & & & & & & & & & & & state: "",
& & & & & & & & & & & & & & & style: "",
& & & & & & & & & & & & & & & href: ""
& & & & & & & & & & & & & & });
第三方页面显示二维码的容器id
应用唯一标识,在微信开放平台提交应用审核通过后获得
应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即可
redirect_uri
重定向地址,需要进行UrlEncode
用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
提供"black"、"white"可选,默认为黑色文字描述。详见文档底部FAQ
自定义样式链接,第三方可根据实际需求覆盖默认样式。详见文档底部FAQ
第二步:通过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
应用唯一标识,在微信开放平台提交应用审核通过后获得
应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
填写第一步获取的code参数
grant_type
填authorization_code
正确的返回:
{&"access_token":"ACCESS_TOKEN",&"expires_in":7200,&"refresh_token":"REFRESH_TOKEN","openid":"OPENID",&"scope":"SCOPE","unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}
access_token
接口调用凭证
expires_in
access_token接口调用凭证超时时间,单位(秒)
refresh_token
用户刷新access_token
授权用户唯一标识
用户授权的作用域,使用逗号(,)分隔
只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
错误返回样例:
{"errcode":40029,"errmsg":"invalid code"}
刷新access_token有效期
access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新,access_token刷新结果有两种:
1. 若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;
2. 若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。
refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。
获取第一步的code后,请求以下链接进行refresh_token:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
应用唯一标识
grant_type
填refresh_token
refresh_token
填写通过access_token获取到的refresh_token参数
正确的返回:
{&"access_token":"ACCESS_TOKEN",&"expires_in":7200,&"refresh_token":"REFRESH_TOKEN",&"openid":"OPENID",&"scope":"SCOPE"&}
access_token
接口调用凭证
expires_in
access_token接口调用凭证超时时间,单位(秒)
refresh_token
用户刷新access_token
授权用户唯一标识
用户授权的作用域,使用逗号(,)分隔
错误返回样例:
{"errcode":40030,"errmsg":"invalid refresh_token"}
1、Appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret);
2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户微信相关接口功能被恶意发起等行为;
3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。
建议将secret、用户数据(如access_token)放在App云端服务器,由云端中转接口调用请求。
第三步:通过access_token调用接口
获取access_token后,进行接口调用,有以下前提:
1. access_token有效且未超时;
2. 微信用户已授权给第三方应用帐号相应接口作用域(scope)。
对于接口作用域(scope),能调用的接口有以下:
snsapi_base
/sns/oauth2/access_token
通过code换取access_token、refresh_token和已授权scope
/sns/oauth2/refresh_token
刷新或续期access_token使用
检查access_token有效性
snsapi_userinfo
/sns/userinfo
获取用户个人信息
其中snsapi_base属于基础接口,若应用已拥有其它scope权限,则默认拥有snsapi_base的权限。使用snsapi_base可以让移动端网页授权绕过跳转授权登录页请求用户授权的动作,直接跳转第三方网页带上授权临时票据(code),但会使得用户已授权作用域(scope)仅为snsapi_base,从而导致无法获取到需要用户授权才允许获得的数据和基础功能。
接口调用方法可查阅
1. 什么是授权临时票据(code)?
答:第三方通过code进行获取access_token的时候需要用到,code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。code的临时性和一次保障了微信授权登录的安全性。第三方可通过使用https和state参数,进一步加强自身授权登录的安全性。
2. 什么是授权作用域(scope)?
答:授权作用域(scope)代表用户授权给第三方的接口权限,第三方应用需要向微信开放平台申请使用相应scope的权限后,使用文档所述方式让用户进行授权,经过用户授权,获取到相应access_token后方可对接口进行调用。
3. 网站内嵌二维码微信登录JS代码中style字段作用?
答:第三方页面颜色风格可能为浅色调或者深色调,若第三方页面为浅色背景,style字段应提供"black"值(或者不提供,black为默认值),则对应的微信登录文字样式为黑色。相关效果如下:
若提供"white"值,则对应的文字描述将显示为白色,适合深色背景。相关效果如下:
4.网站内嵌二维码微信登录JS代码中href字段作用?
答:如果第三方觉得微信团队提供的默认样式与自己的页面样式不匹配,可以自己提供样式文件来覆盖默认样式。举个例子,如第三方觉得默认二维码过大,可以提供相关css样式文件,并把链接地址填入href字段
.impowerBox .qrcode {width: 200}.impowerBox .title {display:}.impowerBox .info {width: 200}.status_icon {display:none}.impowerBox .status {text-align:}&
相关效果如下:
通过code获取access_token
通过code获取access_token的接口。
http请求方式: GET
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
应用唯一标识,在微信开放平台提交应用审核通过后获得
应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
填写第一步获取的code参数
grant_type
填authorization_code
正确的返回:
{&"access_token":"ACCESS_TOKEN",&"expires_in":7200,&"refresh_token":"REFRESH_TOKEN","openid":"OPENID",&"scope":"SCOPE"&}
access_token
接口调用凭证
expires_in
access_token接口调用凭证超时时间,单位(秒)
refresh_token
用户刷新access_token
授权用户唯一标识
用户授权的作用域,使用逗号(,)分隔
错误返回样例:
{"errcode":40029,"errmsg":"invalid code"}
刷新或续期access_token使用
access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新,access_token刷新结果有两种:
1. 若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;
2.若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。
refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。
使用/sns/oauth2/access_token接口获取到的refresh_token进行以下接口调用:
http请求方式: GET
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
应用唯一标识
grant_type
填refresh_token
refresh_token
填写通过access_token获取到的refresh_token参数
正确的返回:
{&"access_token":"ACCESS_TOKEN",&"expires_in":7200,&"refresh_token":"REFRESH_TOKEN",&"openid":"OPENID",&"scope":"SCOPE"&}
access_token
接口调用凭证
expires_in
access_token接口调用凭证超时时间,单位(秒)
refresh_token
用户刷新access_token
授权用户唯一标识
用户授权的作用域,使用逗号(,)分隔
错误返回样例:
{"errcode":40030,"errmsg":"invalid refresh_token"}
检验授权凭证(access_token)是否有效
http请求方式: GET
https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID
access_token
调用接口凭证
普通用户标识,对该公众帐号唯一
正确的Json返回结果:
{&"errcode":0,"errmsg":"ok"}
错误的Json返回示例:
{&"errcode":40003,"errmsg":"invalid openid"}
此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
http请求方式: GET
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
access_token
普通用户的标识,对当前开发者帐号唯一
正确的Json返回结果:
{&"openid":"OPENID","nickname":"NICKNAME","sex":1,"province":"PROVINCE","city":"CITY","country":"COUNTRY","headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0","privilege":["PRIVILEGE1",&"PRIVILEGE2"],"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"}
普通用户的标识,对当前开发者帐号唯一
普通用户昵称
普通用户性别,1为男性,2为女性
普通用户个人资料填写的省份
普通用户个人资料填写的城市
国家,如中国为CN
headimgurl
用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
用户特权信息,json数组,如微信沃卡用户为(chinaunicom)
用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。
错误的Json返回示例:
{&"errcode":40003,"errmsg":"invalid openid"}
调用频率限制
通过code换取access_token
刷新access_token
获取用户基本信息
阅读(...) 评论()你所查询的页面不存在
找不到你访问的页面
网站帮助:
盛拓传媒: |13:49 提问
用什么软件可以抓取微信的转账请求
微信转账用的是什么请求,有什么软件可以监听转账的请求信息。之前有试过Fidder,可是Fidder只能监听Http和Https请求,估计转账不是用的这两种请求方式。
按赞数排序
sniffer pro,只要是网络通讯,不管什么协议,都能抓取。
当然,微信会不会对数据加密,这个就不知道了。你试试看。
网上不是有个抓包软件吗?百度搜索就出来了,
ios设备有线连接mac后,可以在设置虚拟网络接口后通过wireshark直接抓取该接口的数据包。
ios安装Thor,安装描述文件,可以直接在手机上查看抓包信息
wireshark 专业抓各种包
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐请求下怎么申请微信????????????????????????????????????????_百度知道
请求下怎么申请微信????????????????????????????????????????
请求下怎么申请微信????????????????????????????????????????????????????????????????????????????...
请求下怎么申请微信????????????????????????????????????????????????????????????????????????????????????????????????????????(女生回答)
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自知道合伙人认证行家
电脑类行家
采纳数:78235
获赞数:80341
泉州兴瑞发公司最佳优秀员工。
一,先下载微信软件,安装。二,按照里面有提示注册账号;账号和手机号码是绑定的,可以用QQ号码,也可以用邮箱账号。或者手机号码都可以的。三,输入账号和密码后登陆。 一,先下载微信软件,安装。二,按照里面有提示注册账号;账号和手机号码是绑定的,可以用QQ号码,也可以用邮箱账号。或者手机号码都可以的。三,输入账号和密码后登陆。 用手机登陆的方式:微信是腾讯的手机软件,你可以去wap.qq.com下载微信不需要申请,用QQ号可以默认登录,关键是你的手机是否支持安装微信软件。至于你的手机是否支持~这就要看腾讯官网的手机支持型号列表了。
获赞数:70
擅长:暂未定制
手机上安装微信就OK了。
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 微信收不到好友请求 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信