精华内容
下载资源
问答
  • uniapp 开发微信小程序——获取openid

    万次阅读 2019-07-23 09:59:35
    1、初始化微信云函数 //初始化微信云函数 wx.cloud.init({ // 此处请填入环境 ID, 环境 ID 可打开云控制台查看 env: '********', traceUser: true, }) 2、调用云函数 // 调用云函数...

    1、初始化微信云函数

    			//初始化微信云函数
    			wx.cloud.init({
    				// 此处请填入环境 ID, 环境 ID 可打开云控制台查看
    				env: '********',
    				traceUser: true,
    			})

     2、调用云函数

    				// 调用云函数
    				wx.cloud.callFunction({
    				  name: 'login',
    				  data: {},
    				  success: res => {
    					debugger
    					console.log('[云函数] [login] user openid: ', res.result.openid)
    				  },
    				  fail: err => {
    					console.error('[云函数] [login] 调用失败', err)
    				  }
    				})

     

    展开全文
  • 1.uniapp中App.vue文件中写获取openId的方法 onLaunch: function() { console.log('App Launch'); // 第一步:初始化微信云函数 wx.cloud.init({ env: 'test-2gt0mbv78a4941aa', // 打开微信云开发...

    1.uniapp中App.vue文件中写获取openId的方法

    	onLaunch: function() {
    		console.log('App Launch');
    		  // 第一步:初始化微信云函数
    		  wx.cloud.init({
    			env: 'test-2gt0mbv78a4941aa',  // 打开微信云开发控制平台,右上角点击[设置] - [环境设置] 
    			traceUser: true
    		  }),
    		  // 第二步:获取用户的openid
    		  wx.cloud.callFunction({
    			name: 'getOpenId',	 // 打开微信云开发控制平台,左上角点击[云函数]
    			data: {},
    			success: res => {
    			  // debugger
    			  // 第三步(可省略):缓存用户openid,方便后续再次调用
    			  wx.setStorage({
    				key: "user",
    				data: res.result.userInfo.openId
    			  })
    			  console.log('成功获取openid: ', res.result.userInfo.openId)
    			},
    			fail: err => {
    			  console.error('获取失败:', err)
    			}
    		  })
    	},

    2.小程序中添加云函数

     

    3.在小程序项目根目录找到 project.config.json 文件,新增 cloudfunctionRoot 字段,指定本地已存在的目录作为云函数的本地根目录

    {
       "cloudfunctionRoot": "./functions/"
    }

    4.在小程序根目录新建functions目录,该目录会自动变成云函数文件夹,然后右键新建云函数

    5.编写云函数

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    
    cloud.init()
    
    // 云函数入口函数
    exports.main = async (event, context) => {
      const wxContext = cloud.getWXContext()
    
      return {
        event,
        openid: wxContext.OPENID,
        appid: wxContext.APPID,
        unionid: wxContext.UNIONID,
      }
    }

    6.运行项目

    展开全文
  • uniapp微信小程序获取用户信息和openId获取用户信息获取openId 获取用户信息 使用getUserProfile(),这个方法在每次出发的时候都会调起微信授权的那个弹出层,为什么不用getUserInfo(),微信给程序员们发公告了,...

    uniapp在微信小程序获取用户信息和openId

    获取用户信息

    使用getUserProfile(),这个方法在每次出发的时候都会调起微信授权的那个弹出层,为什么不用getUserInfo(),微信给程序员们发公告了,不同于gerUserInfo,getUserProfile的使用方法被简化了许多,不需要在按钮属性中添加open-type,更不用规定按钮的方法,只需要:

    <button @click="getUserProfile">获取用户信息</button>
    

    就完事了。

    这个API需要在微信开发者工具基础调试库版本2.10.4以上或微信版本7.0.9以上才可以使用。

    所以使用之前在页面的onLoad()里面判断下:

    onLoad() {
    	 if(uni.getUserProfile){
    	     this.canIUseGetUserProfile = true
    	 }
    },
    

    在按钮上加上判断就可以了:

    <button v-if="canIUseGetUserProfile" class="sys_btn" @click="getUserProfile">授权</button>
    

    使用时的注意事项,这个方法必须由按钮直接调用,不可以在其他函数的回调中使用这个方法,否则就会报如下错误:

    
    > errMsg: "getUserProfile:fail can only be invoked by user TAP gesture."
    
    

    因此,直接调用就可以了,具体如下:

    DOM:

    <button v-if="canIUseGetUserProfile" class="sys_btn" @click="getUserProfile">授权</button>
    

    JS:

    getUserProfile() {
              //获取用户信息
                uni.getUserProfile({
                    desc: '用户信息展示',
                    success: (info) => { 
                        this.userInfo = info
                    },
                    fail: (err) => {
                        uni.showToast({
                            title: "微信登录授权失败",
                            icon: "none"
                        });
                    }
                })
    },
    

    关于getUserProfile()的参数和出参照文档即可: wx.getUserProfile(Object object)

    获取到用户信息之后,存到vuex中供后续使用。

    获取openId

    在获取openID之前需要先调用login()方法获取一个登陆凭证

    uni.login({
         timeout: 10000,
          provider: 'weixin',  //如果是uniapp,在这里需要标明平台的类型,支持的参数请查阅uniapp官网的uni.login()文档
          success: (res) => {
    			//登陆成功的回调
    	  },
          fail: (err) => {
             	//登陆失败的回调
          }
    })
    

    在获取到登陆凭证之后,就可以调用接口获取openId和session_key等参数了。
    可以在login()的success中直接使用如下代码:

    uni.request({  
          url: 'https://api.weixin.qq.com/sns/jscode2session',  
          method:'GET',  
          data: {  
              appid: 'wx xxxxxxxxxxxx,       //你的小程序的APPID  
              secret: 'xxxxxxxxxxxxx',       //你的小程序的secret,  
              js_code: 'xxxxxxxxxxxxx        //wx.login 登录成功后的code  
          },  
          success: (cts) => {  
              console.log(cts);
          }  
    });  
    

    直接使用微信提供的https://api.weixin.qq.com/sns/jscode2session接口,传入的参数重appid和secret需要小程序管理员到微信公众平台获取,具体详细的获取方式不作赘述。

    到这里微信授权获取登陆信息的过程就结束了,可以将获取到的信息都存储到uniapp的Storage中做一个数据持久化,这样可以避免页面刷新导致的数据丢失。

    展开全文
  • uniapp实现微信公众号登录获取openid

    千次阅读 2020-12-23 13:47:43
    下面是微信文档介绍 后台开发参考官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 签名校验工具:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 步骤一:绑定...

     

    下面是微信文档介绍

    后台开发参考官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

    签名校验工具:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign

    步骤一:绑定域名

    先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

    备注:登录后可在“开发者中心”查看对应的接口权限。

     

    步骤二:引入JS文件

    在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js

    如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)。

    备注:支持使用 AMD/CMD 标准模块加载方法加载

     

    步骤三:通过config接口注入权限验证配置

    所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。

    wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '', // 必填,公众号的唯一标识
        timestamp: , // 必填,生成签名的时间戳
        nonceStr: '', // 必填,生成签名的随机串
        signature: '',// 必填,签名
        jsApiList: [] // 必填,需要使用的JS接口列表
    });
    

    签名算法见文末的附录1,所有JS接口列表见文末的附录2

     

    步骤四:通过ready接口处理成功验证

    wx.ready(function(){
        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    });
    

     

    步骤五:通过error接口处理失败验证

    wx.error(function(res){
        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    });
    

     

    接口调用说明

    所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数:

    1.success:接口调用成功时执行的回调函数。

    2.fail:接口调用失败时执行的回调函数。

    3.complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。

    4.cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。

    5.trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。

    备注:不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回。

    以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性errMsg,其值格式如下:

    调用成功时:"xxx:ok" ,其中xxx为调用的接口名

    用户取消时:"xxx:cancel",其中xxx为调用的接口名

    调用失败时:其值为具体错误信息

    实现代码

    1、引用下方微信的js文件放到js_sdk下面

    2、在main.js中创建引用

    import wx from 'js_sdk/weixin'
    Vue.prototype.$wx = wx;

    3、在App.vue中使用并且实现代码 在onLaunch中实现下面代码

    let ua = navigator.userAgent.toLowerCase();
                //判断是不是微信内核浏览器
    			if (ua.indexOf('micromessenger') !== -1) {
    				let openid = this.$queue.getData('openid');
    				//校验本地有没有openid
    				if (!openid) {
    					//检测url里面是否携带code
    					if (window.location.href.indexOf('?code=') !== -1 || window.location.href.indexOf('&code=') !== -1) {
    						let code;
    						if (window.location.href.indexOf('?code=') !== -1) {
    							code = window.location.href.split('?code=')[1].split('&')[0];
    						} else {
    							code = window.location.href.split('&code=')[1].split('&')[0];
    						}
    						//请求后端网络请求
    					} else {
    						//重点 这里getWxAppid这个是微信公众号的appid
    						window.location.href =
    							'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
    							this.$queue.getWxAppid() +
    							'&redirect_uri=' +
    							window.location.href.split('#')[0] +
    							'&response_type=code&scope=snsapi_userinfo#wechat_redirect';
    					}
    				} else {
    					//本地已经有了opneid直接调用接口登录即可
    				}
    			}

    下面是weixin.js

    //#ifdef H5
    !function (e, n) {
        "object" == typeof exports && "object" == typeof module ? module.exports = n(e) : "function" == typeof define && (define.amd || define.cmd) ? define(function () {
            return n(e)
        }) : n(e, !0)
    }(window, function (o, e) {
        function c(n, e, i) {
            o.WeixinJSBridge ? WeixinJSBridge.invoke(n, r(e), function (e) {
                a(n, e, i)
            }) : d(n, i)
        }
    
        function i(n, i, t) {
            o.WeixinJSBridge ? WeixinJSBridge.on(n, function (e) {
                t && t.trigger && t.trigger(e), a(n, e, i)
            }) : d(n, t || i)
        }
    
        function r(e) {
            return (e = e || {}).appId = M.appId, e.verifyAppId = M.appId, e.verifySignType = "sha1", e.verifyTimestamp = M.timestamp + "", e.verifyNonceStr = M.nonceStr, e.verifySignature = M.signature, e
        }
    
        function n(e) {
            return {
                timeStamp: e.timestamp + "",
                nonceStr: e.nonceStr,
                package: e.package,
                paySign: e.paySign,
                signType: e.signType || "SHA1"
            }
        }
    
        function a(e, n, i) {
            "openEnterpriseChat" == e && (n.errCode = n.err_code), delete n.err_code, delete n.err_desc, delete n.err_detail;
            var t = n.errMsg;
            t || (t = n.err_msg, delete n.err_msg, t = function (e, n) {
                var i = e, t = f[i];
                t && (i = t);
                var o = "ok";
                if (n) {
                    var r = n.indexOf(":");
                    "confirm" == (o = n.substring(r + 1)) && (o = "ok"), "failed" == o && (o = "fail"), -1 != o.indexOf("failed_") && (o = o.substring(7)), -1 != o.indexOf("fail_") && (o = o.substring(5)), "access denied" != (o = (o = o.replace(/_/g, " ")).toLowerCase()) && "no permission to execute" != o || (o = "permission denied"), "config" == i && "function not exist" == o && (o = "ok"), "" == o && (o = "fail")
                }
                return n = i + ":" + o
            }(e, t), n.errMsg = t), (i = i || {})._complete && (i._complete(n), delete i._complete), t = n.errMsg || "", M.debug && !i.isInnerInvoke && alert(JSON.stringify(n));
            var o = t.indexOf(":");
            switch (t.substring(o + 1)) {
                case"ok":
                    i.success && i.success(n);
                    break;
                case"cancel":
                    i.cancel && i.cancel(n);
                    break;
                default:
                    i.fail && i.fail(n)
            }
            i.complete && i.complete(n)
        }
    
        function s(e) {
            if (e) {
                for (var n = 0, i = e.length; n < i; ++n) {
                    var t = e[n], o = p[t];
                    o && (e[n] = o)
                }
                return e
            }
        }
    
        function d(e, n) {
            if (!(!M.debug || n && n.isInnerInvoke)) {
                var i = f[e];
                i && (e = i), n && n._complete && delete n._complete, console.log('"' + e + '",', n || "")
            }
        }
    
        function l() {
            return (new Date).getTime()
        }
    
        function u(e) {
            I && (o.WeixinJSBridge ? e() : t.addEventListener && t.addEventListener("WeixinJSBridgeReady", e, !1))
        }
    
        if (!o.jWeixin) {
            var p = {
                    config: "preVerifyJSAPI",
                    onMenuShareTimeline: "menu:share:timeline",
                    onMenuShareAppMessage: "menu:share:appmessage",
                    onMenuShareQQ: "menu:share:qq",
                    onMenuShareWeibo: "menu:share:weiboApp",
                    onMenuShareQZone: "menu:share:QZone",
                    previewImage: "imagePreview",
                    getLocation: "geoLocation",
                    openProductSpecificView: "openProductViewWithPid",
                    addCard: "batchAddCard",
                    openCard: "batchViewCard",
                    chooseWXPay: "getBrandWCPayRequest",
                    openEnterpriseRedPacket: "getRecevieBizHongBaoRequest",
                    startSearchBeacons: "startMonitoringBeacons",
                    stopSearchBeacons: "stopMonitoringBeacons",
                    onSearchBeacons: "onBeaconsInRange",
                    consumeAndShareCard: "consumedShareCard",
                    openAddress: "editAddress"
                }, f = function () {
                    var e = {};
                    for (var n in p) e[p[n]] = n;
                    return e
                }(), t = o.document, m = t.title, g = navigator.userAgent.toLowerCase(), h = navigator.platform.toLowerCase(),
                v = !(!h.match("mac") && !h.match("win")), S = -1 != g.indexOf("wxdebugger"),
                I = -1 != g.indexOf("micromessenger"), y = -1 != g.indexOf("android"),
                _ = -1 != g.indexOf("iphone") || -1 != g.indexOf("ipad"),
                w = (O = g.match(/micromessenger\/(\d+\.\d+\.\d+)/) || g.match(/micromessenger\/(\d+\.\d+)/)) ? O[1] : "",
                k = {initStartTime: l(), initEndTime: 0, preVerifyStartTime: 0, preVerifyEndTime: 0}, T = {
                    version: 1,
                    appId: "",
                    initTime: 0,
                    preVerifyTime: 0,
                    networkType: "",
                    isPreVerifyOk: 1,
                    systemType: _ ? 1 : y ? 2 : -1,
                    clientVersion: w,
                    url: encodeURIComponent(location.href)
                }, M = {}, P = {_completes: []}, x = {state: 0, data: {}};
            u(function () {
                k.initEndTime = l()
            });
            var A = !1, V = [], C = {
                config: function (e) {
                    d("config", M = e);
                    var t = !1 !== M.check;
                    u(function () {
                        if (t) c(p.config, {verifyJsApiList: s(M.jsApiList)}, function () {
                            P._complete = function (e) {
                                k.preVerifyEndTime = l(), x.state = 1, x.data = e
                            }, P.success = function (e) {
                                T.isPreVerifyOk = 0
                            }, P.fail = function (e) {
                                P._fail ? P._fail(e) : x.state = -1
                            };
                            var t = P._completes;
                            return t.push(function () {
                                !function (e) {
                                    if (!(v || S || M.debug || w < "6.0.2" || T.systemType < 0)) {
                                        var i = new Image;
                                        T.appId = M.appId, T.initTime = k.initEndTime - k.initStartTime, T.preVerifyTime = k.preVerifyEndTime - k.preVerifyStartTime, C.getNetworkType({
                                            isInnerInvoke: !0,
                                            success: function (e) {
                                                T.networkType = e.networkType;
                                                var n = "https://open.weixin.qq.com/sdk/report?v=" + T.version + "&o=" + T.isPreVerifyOk + "&s=" + T.systemType + "&c=" + T.clientVersion + "&a=" + T.appId + "&n=" + T.networkType + "&i=" + T.initTime + "&p=" + T.preVerifyTime + "&u=" + T.url;
                                                i.src = n
                                            }
                                        })
                                    }
                                }()
                            }), P.complete = function (e) {
                                for (var n = 0, i = t.length; n < i; ++n) t[n]();
                                P._completes = []
                            }, P
                        }()), k.preVerifyStartTime = l(); else {
                            x.state = 1;
                            for (var e = P._completes, n = 0, i = e.length; n < i; ++n) e[n]();
                            P._completes = []
                        }
                    }), C.invoke || (C.invoke = function (e, n, i) {
                        o.WeixinJSBridge && WeixinJSBridge.invoke(e, r(n), i)
                    }, C.on = function (e, n) {
                        o.WeixinJSBridge && WeixinJSBridge.on(e, n)
                    })
                }, ready: function (e) {
                    0 != x.state ? e() : (P._completes.push(e), !I && M.debug && e())
                }, error: function (e) {
                    w < "6.0.2" || (-1 == x.state ? e(x.data) : P._fail = e)
                }, checkJsApi: function (e) {
                    c("checkJsApi", {jsApiList: s(e.jsApiList)}, (e._complete = function (e) {
                        if (y) {
                            var n = e.checkResult;
                            n && (e.checkResult = JSON.parse(n))
                        }
                        e = function (e) {
                            var n = e.checkResult;
                            for (var i in n) {
                                var t = f[i];
                                t && (n[t] = n[i], delete n[i])
                            }
                            return e
                        }(e)
                    }, e))
                }, onMenuShareTimeline: function (e) {
                    i(p.onMenuShareTimeline, {
                        complete: function () {
                            c("shareTimeline", {
                                title: e.title || m,
                                desc: e.title || m,
                                img_url: e.imgUrl || "",
                                link: e.link || location.href,
                                type: e.type || "link",
                                data_url: e.dataUrl || ""
                            }, e)
                        }
                    }, e)
                }, onMenuShareAppMessage: function (n) {
                    i(p.onMenuShareAppMessage, {
                        complete: function (e) {
                            "favorite" === e.scene ? c("sendAppMessage", {
                                title: n.title || m,
                                desc: n.desc || "",
                                link: n.link || location.href,
                                img_url: n.imgUrl || "",
                                type: n.type || "link",
                                data_url: n.dataUrl || ""
                            }) : c("sendAppMessage", {
                                title: n.title || m,
                                desc: n.desc || "",
                                link: n.link || location.href,
                                img_url: n.imgUrl || "",
                                type: n.type || "link",
                                data_url: n.dataUrl || ""
                            }, n)
                        }
                    }, n)
                }, onMenuShareQQ: function (e) {
                    i(p.onMenuShareQQ, {
                        complete: function () {
                            c("shareQQ", {
                                title: e.title || m,
                                desc: e.desc || "",
                                img_url: e.imgUrl || "",
                                link: e.link || location.href
                            }, e)
                        }
                    }, e)
                }, onMenuShareWeibo: function (e) {
                    i(p.onMenuShareWeibo, {
                        complete: function () {
                            c("shareWeiboApp", {
                                title: e.title || m,
                                desc: e.desc || "",
                                img_url: e.imgUrl || "",
                                link: e.link || location.href
                            }, e)
                        }
                    }, e)
                }, onMenuShareQZone: function (e) {
                    i(p.onMenuShareQZone, {
                        complete: function () {
                            c("shareQZone", {
                                title: e.title || m,
                                desc: e.desc || "",
                                img_url: e.imgUrl || "",
                                link: e.link || location.href
                            }, e)
                        }
                    }, e)
                }, updateTimelineShareData: function (e) {
                    c("updateTimelineShareData", {title: e.title, link: e.link, imgUrl: e.imgUrl}, e)
                }, updateAppMessageShareData: function (e) {
                    c("updateAppMessageShareData", {title: e.title, desc: e.desc, link: e.link, imgUrl: e.imgUrl}, e)
                }, startRecord: function (e) {
                    c("startRecord", {}, e)
                }, stopRecord: function (e) {
                    c("stopRecord", {}, e)
                }, onVoiceRecordEnd: function (e) {
                    i("onVoiceRecordEnd", e)
                }, playVoice: function (e) {
                    c("playVoice", {localId: e.localId}, e)
                }, pauseVoice: function (e) {
                    c("pauseVoice", {localId: e.localId}, e)
                }, stopVoice: function (e) {
                    c("stopVoice", {localId: e.localId}, e)
                }, onVoicePlayEnd: function (e) {
                    i("onVoicePlayEnd", e)
                }, uploadVoice: function (e) {
                    c("uploadVoice", {localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1}, e)
                }, downloadVoice: function (e) {
                    c("downloadVoice", {serverId: e.serverId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1}, e)
                }, translateVoice: function (e) {
                    c("translateVoice", {localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1}, e)
                }, chooseImage: function (e) {
                    c("chooseImage", {
                        scene: "1|2",
                        count: e.count || 9,
                        sizeType: e.sizeType || ["original", "compressed"],
                        sourceType: e.sourceType || ["album", "camera"]
                    }, (e._complete = function (e) {
                        if (y) {
                            var n = e.localIds;
                            try {
                                n && (e.localIds = JSON.parse(n))
                            } catch (e) {
                            }
                        }
                    }, e))
                }, getLocation: function (e) {
                }, previewImage: function (e) {
                    c(p.previewImage, {current: e.current, urls: e.urls}, e)
                }, uploadImage: function (e) {
                    c("uploadImage", {localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1}, e)
                }, downloadImage: function (e) {
                    c("downloadImage", {serverId: e.serverId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1}, e)
                }, getLocalImgData: function (e) {
                    !1 === A ? (A = !0, c("getLocalImgData", {localId: e.localId}, (e._complete = function (e) {
                        if (A = !1, 0 < V.length) {
                            var n = V.shift();
                            wx.getLocalImgData(n)
                        }
                    }, e))) : V.push(e)
                }, getNetworkType: function (e) {
                    c("getNetworkType", {}, (e._complete = function (e) {
                        e = function (e) {
                            var n = e.errMsg;
                            e.errMsg = "getNetworkType:ok";
                            var i = e.subtype;
                            if (delete e.subtype, i) e.networkType = i; else {
                                var t = n.indexOf(":"), o = n.substring(t + 1);
                                switch (o) {
                                    case"wifi":
                                    case"edge":
                                    case"wwan":
                                        e.networkType = o;
                                        break;
                                    default:
                                        e.errMsg = "getNetworkType:fail"
                                }
                            }
                            return e
                        }(e)
                    }, e))
                }, openLocation: function (e) {
                    c("openLocation", {
                        latitude: e.latitude,
                        longitude: e.longitude,
                        name: e.name || "",
                        address: e.address || "",
                        scale: e.scale || 28,
                        infoUrl: e.infoUrl || ""
                    }, e)
                }, getLocation: function (e) {
                    c(p.getLocation, {type: (e = e || {}).type || "wgs84"}, (e._complete = function (e) {
                        delete e.type
                    }, e))
                }, hideOptionMenu: function (e) {
                    c("hideOptionMenu", {}, e)
                }, showOptionMenu: function (e) {
                    c("showOptionMenu", {}, e)
                }, closeWindow: function (e) {
                    c("closeWindow", {}, e = e || {})
                }, hideMenuItems: function (e) {
                    c("hideMenuItems", {menuList: e.menuList}, e)
                }, showMenuItems: function (e) {
                    c("showMenuItems", {menuList: e.menuList}, e)
                }, hideAllNonBaseMenuItem: function (e) {
                    c("hideAllNonBaseMenuItem", {}, e)
                }, showAllNonBaseMenuItem: function (e) {
                    c("showAllNonBaseMenuItem", {}, e)
                }, scanQRCode: function (e) {
                    c("scanQRCode", {
                        needResult: (e = e || {}).needResult || 0,
                        scanType: e.scanType || ["qrCode", "barCode"]
                    }, (e._complete = function (e) {
                        if (_) {
                            var n = e.resultStr;
                            if (n) {
                                var i = JSON.parse(n);
                                e.resultStr = i && i.scan_code && i.scan_code.scan_result
                            }
                        }
                    }, e))
                }, openAddress: function (e) {
                    c(p.openAddress, {}, (e._complete = function (e) {
                        var n;
                        (n = e).postalCode = n.addressPostalCode, delete n.addressPostalCode, n.provinceName = n.proviceFirstStageName, delete n.proviceFirstStageName, n.cityName = n.addressCitySecondStageName, delete n.addressCitySecondStageName, n.countryName = n.addressCountiesThirdStageName, delete n.addressCountiesThirdStageName, n.detailInfo = n.addressDetailInfo, delete n.addressDetailInfo, e = n
                    }, e))
                }, openProductSpecificView: function (e) {
                    c(p.openProductSpecificView, {pid: e.productId, view_type: e.viewType || 0, ext_info: e.extInfo}, e)
                }, addCard: function (e) {
                    for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) {
                        var r = n[t], a = {card_id: r.cardId, card_ext: r.cardExt};
                        i.push(a)
                    }
                    c(p.addCard, {card_list: i}, (e._complete = function (e) {
                        var n = e.card_list;
                        if (n) {
                            for (var i = 0, t = (n = JSON.parse(n)).length; i < t; ++i) {
                                var o = n[i];
                                o.cardId = o.card_id, o.cardExt = o.card_ext, o.isSuccess = !!o.is_succ, delete o.card_id, delete o.card_ext, delete o.is_succ
                            }
                            e.cardList = n, delete e.card_list
                        }
                    }, e))
                }, chooseCard: function (e) {
                    c("chooseCard", {
                        app_id: M.appId,
                        location_id: e.shopId || "",
                        sign_type: e.signType || "SHA1",
                        card_id: e.cardId || "",
                        card_type: e.cardType || "",
                        card_sign: e.cardSign,
                        time_stamp: e.timestamp + "",
                        nonce_str: e.nonceStr
                    }, (e._complete = function (e) {
                        e.cardList = e.choose_card_info, delete e.choose_card_info
                    }, e))
                }, openCard: function (e) {
                    for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) {
                        var r = n[t], a = {card_id: r.cardId, code: r.code};
                        i.push(a)
                    }
                    c(p.openCard, {card_list: i}, e)
                }, consumeAndShareCard: function (e) {
                    c(p.consumeAndShareCard, {consumedCardId: e.cardId, consumedCode: e.code}, e)
                }, chooseWXPay: function (e) {
                    c(p.chooseWXPay, n(e), e)
                }, openEnterpriseRedPacket: function (e) {
                    c(p.openEnterpriseRedPacket, n(e), e)
                }, startSearchBeacons: function (e) {
                    c(p.startSearchBeacons, {ticket: e.ticket}, e)
                }, stopSearchBeacons: function (e) {
                    c(p.stopSearchBeacons, {}, e)
                }, onSearchBeacons: function (e) {
                    i(p.onSearchBeacons, e)
                }, openEnterpriseChat: function (e) {
                    c("openEnterpriseChat", {useridlist: e.userIds, chatname: e.groupName}, e)
                }, launchMiniProgram: function (e) {
                    c("launchMiniProgram", {
                        targetAppId: e.targetAppId, path: function (e) {
                            if ("string" == typeof e && 0 < e.length) {
                                var n = e.split("?")[0], i = e.split("?")[1];
                                return n += ".html", void 0 !== i ? n + "?" + i : n
                            }
                        }(e.path), envVersion: e.envVersion
                    }, e)
                }, miniProgram: {
                    navigateBack: function (e) {
                        e = e || {}, u(function () {
                            c("invokeMiniProgramAPI", {name: "navigateBack", arg: {delta: e.delta || 1}}, e)
                        })
                    }, navigateTo: function (e) {
                        u(function () {
                            c("invokeMiniProgramAPI", {name: "navigateTo", arg: {url: e.url}}, e)
                        })
                    }, redirectTo: function (e) {
                        u(function () {
                            c("invokeMiniProgramAPI", {name: "redirectTo", arg: {url: e.url}}, e)
                        })
                    }, switchTab: function (e) {
                        u(function () {
                            c("invokeMiniProgramAPI", {name: "switchTab", arg: {url: e.url}}, e)
                        })
                    }, reLaunch: function (e) {
                        u(function () {
                            c("invokeMiniProgramAPI", {name: "reLaunch", arg: {url: e.url}}, e)
                        })
                    }, postMessage: function (e) {
                        u(function () {
                            c("invokeMiniProgramAPI", {name: "postMessage", arg: e.data || {}}, e)
                        })
                    }, getEnv: function (e) {
                        u(function () {
                            e({miniprogram: "miniprogram" === o.__wxjs_environment})
                        })
                    }
                }
            }, L = 1, B = {};
            return t.addEventListener("error", function (e) {
                if (!y) {
                    var n = e.target, i = n.tagName, t = n.src;
                    if (("IMG" == i || "VIDEO" == i || "AUDIO" == i || "SOURCE" == i) && -1 != t.indexOf("wxlocalresource://")) {
                        e.preventDefault(), e.stopPropagation();
                        var o = n["wx-id"];
                        if (o || (o = L++, n["wx-id"] = o), B[o]) return;
                        B[o] = !0, wx.ready(function () {
                            wx.getLocalImgData({
                                localId: t, success: function (e) {
                                    n.src = e.localData
                                }
                            })
                        })
                    }
                }
            }, !0), t.addEventListener("load", function (e) {
                if (!y) {
                    var n = e.target, i = n.tagName;
                    if (n.src, "IMG" == i || "VIDEO" == i || "AUDIO" == i || "SOURCE" == i) {
                        var t = n["wx-id"];
                        t && (B[t] = !1)
                    }
                }
            }, !0), e && (o.wx = o.jWeixin = C), C
        }
        var O
    });
    //#endif
    

    微信扫码体验分享 打开公众号可体验分享功能

    展开全文
  • <template> <view class=""> <...获取手机号</button> <button type="default" @click="getlogin">登录</button> </view> </template> <s
  • uniapp开发微信小程序获取用户手机号-链接 功能描述:微信小程序,点击微信第三方登录,获取到当前用户绑定的手机号与openId(或unionid),请求后端接口实现登录。 功能拆分逻辑: 点击某个按钮,弹出请求微信...
  • 当需要openid的时候,就看看本仙女的这篇博客✨ 文章建立在你有appid(也就是说微信公众平台你有账号)的基础上,话不多说,let's start ! Step 1 :https://mp.weixin.qq.com/,进链接以后登录(如下图所示)→点击...
  • uniapp获取微信用户手机号(保姆教程) 第一步 下载解密文件‘mWXBizDataCrypt’ 没有文件就复制该文件的代码创建一个 var crypto = require('crypto') function WXBizDataCrypt(appId, sessionKey) { this....
  • 产品类型:目前只有微信小程序。 目标:授权登录,建立用户体系。 框架:uniapp+云开发+云函数。 方案一:通过官方提供的 univerify 插件 官方文档:uni一键登录 - uni-app官网 (dcloud.io) univerify 是DCloud...
  • 授权 ...<view class="button-sq" hover-class="button-hover" @tap="authoLogin()"> <text>授权</text> ...js代码 (appid,secret在小程序开发&... //用户授权,获取用户信息 authoLogin() { u
  • 前端 uni.login({ provider: 'weixin', ...后端 获取微信用户消息 //接手前端穿的参数 access_token openid $access_token = $request->param('access_token', ''); $openid = $request->param('openid
  • 使用uniapp微信授权登录在安卓端无法获取code怎么办?What should I do if I can’t get the code on the Android side using uniapp for WeChat authorized login?使用uniapp微信授权登录在安卓端无法获取code...
  • uniApp H5微信网页授权,微信支付

    千次阅读 2021-02-05 15:17:05
    用于记录 uniapp 编译成H5后,完成微信授权和微信支付,微信浏览器中主要看场景二 业务场景介绍 业务需要在H5中完成支付功能(微信支付) 使用场景介绍 1、H5运行在普通浏览器中; 2、H5运行在微信浏览器中。 分析...
  • uniapp微信小程序授权登录
  • uniapp对小程序登录实现了封装,先通过uni.login获取code,然后再用code请求自己服务器,自己服务器拿着code去微信服务器获取openid,然后业务自定义实现登录。基本流程跟微信小程序官方文档是一样的 uniapp的话,...
  • 微信公众号调用微信授权登录 1.登录页面 <view class="submit1 disflex" style="justify-content: center;" @tap="submit"> <image src="/static/image/wechat_icon.png" mode=""></image> <...
  • 使用uni.login 方法获取微信openid,后端返回openid和商户openid不匹配
  • uniapp授权微信登陆

    千次阅读 2019-12-05 16:51:04
    uniapp授权微信登陆
  • charset=utf-8', }, data:{} }).then(data=>{ var _this = this console.log(data) if(data.data.code == 200){ console.log(uni.getStorageSync('openid')) //第三步把获取到的微信支付所有参数调用wx的api,wx....
  • uniapp 微信小程序登录获取openid 报错errcode: 40029 我的问题:appid跟秘钥跟微信开发者工具使用不一致,修改前后端使用的一致就可以了 const result = await ctx.curl(`...
  • uni-app获取微信openid及其他信息

    千次阅读 2021-01-04 15:55:28
    -- open-type="getUserInfo" 代表唤起用户授权窗口 --> <!-- @getuserinfo="getUserInfo()" 代表用户同意授权后回调的函数 --> <button open-type="getUserInfo" @getuserinfo="getUserInfo()">...
  • uniapp 授权登录、获取手机号、解密获取用户信息openid 授权登录跟获取手机号都需用户点击操作 1、授权登录 判断是否登录: uni.getSetting({ success(res) { if (!res.authSetting["scope.userInfo...
  • 通常使用openid作为微信用户的唯一主键。受限于微信小程序的限制,不能直接通过小程序前端拿到openid,具体限制如下: 因此,只能走前后端搭配的方式来获取openid获取方式如下: uni.login获取code 将code...
  • UniApp H5 微信支付

    万次阅读 2020-03-13 11:44:33
    第一步,如果没有集成NPM,建议先集成NPM包管理工具 可参考笔者另一篇文章 ...第三步,需要在微信公众平台,设置-公众号设置-功能设置-网页授权域名,配置自己的H5域名,作用网页授权获取openId(支付...
  • 新版本微信小程序通过getUserInfo获取用户的头像是灰色,昵称显示为微信用户,这是微信版本更新了,现在需要用getUserProfile来获取用户的头像和昵称,并且只能页面产生点击事件(例如 button 上 bindtap 的回调中...
  • uniapp实现微信登录或者QQ登录

    千次阅读 2020-08-06 13:39:34
    uniapp实现微信登录或者QQ登录 无论是哪种登录, 都要用到uni.login 一. 获取服务供应商 在实现登录前,先查看一下可以使用哪种方式登录. 在APP平台, 可用的服务商, 是打包环境中配置的服务商, 与手机端是否安装了...
  • uniapp开发微信公众号也就是H5,但是微信公众号在做用户管理(需要登录,获取用户信息等需要微信号的openId),作为一个入门小白,真是困难重重。翻看微信公众号官方文档,知道微信公众号对网页授权有两种方式:一种是...
  • uniapp微信小程序常用api

    千次阅读 2020-05-29 16:53:25
    uniapp微信小程序常用api 1. 判断用户是否授权 uniapp uni.getSetting(OBJECT)点击 小程序 wx.getSetting(Object object)点击 2. 跳出授权窗口 uniapp uni.authorize(OBJECT)点击 小程序 wx.authorize(Object ...
  • 微信H5关于获取微信JSDK(uniapp) Android、IOS浏览器内置环境的兼容 编译配置Hash、History模式的选择 配置Demo示例 hash会携带# 改变#号后面的内容时,不会重新加载的,会新增访问历史记录。 history不会携带#...
  • 第二步骤:根据code去后台获取用户OpenId获取到了就直接进入系统了,没有openid跳转到登录页 附:获取页面code的参数 getCode() { if (sessionStorage.getItem("openid") && sessi.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 633
精华内容 253
关键字:

uniapp获取微信用户openid