"usingComponents": { "userAuthorize":"../../components/userAuthorize/userAuthorize" } //就是下面的这个 <userAuthorize id="userAuthorizeId" class='user-Authorize'/>
this.userAuthori = this.selectComponent('#userAuthorizeId')
this.userAuthori = this.selectComponent('.user-Authorize')
//wx:if='{{hiddenAlert == 1}}' //这个东西如果为真还行否则的话就不会往下走,一直为null,这个方法坑了我 <userAuthorize id="userAuthorizeId" wx:if='{{hiddenAlert == 1}}' class='user-Authorize' />
GitHub 上使用 JavaScript 来生成公钥私钥对的库:https://github.com/travist/jsencrypt/
原因是这个第三方库使用了 window 对象,而微信小程序的页面的脚本逻辑是在 JsCore 中运行,JsCore 是一个没有窗口对象的环境,所以不能在脚本中使用 window,也无法在脚本中操作组件。
经过了一段时间的挣扎,终于找到了解决方法:
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.JSEncrypt = {}))); }(this, (function (exports) { 'use strict'; //--------------------- 这里开始添加--------------------- // 用来替换 navigator var navigator2 = { appName: 'Netscape', userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1' }; // 用来替换window var window2 = { ASN1: null, Base64: null, Hex: null, crypto: null, href: null }; //-------------
小程序的开发者密码(AppSecret)是一个非常重要的字段,使用该密码可以调用小程序的所有后台接口。请不要将该字段放置在微信小程序的前端代码中,因为微信手机客户端容易被反编译并轻松获得Appsecret,造成重大的安全威胁。开发者应将Appsecret保存到后台服务器中,通过服务器使用Appsecert获取Accesstoken。微信公众平台小程序后台的服务器地址设置也将禁止将“api.weixin.qq.com”域名的配置,所有对于“api.weixin.qq.com”域名下的接口请求请全部通过后台服务器发起,请勿直接通过小程序的前端代码发起。
所以解决办法就是把code传给后台,让后台去请求微信的官方接口获得openId和session-key。
总结下整个openid、session_key获取的流程:
注册微信小程序、登录后台在设置中获得appId和secret(密钥)
调用wx.login()接口获取登录凭证js_code
调用wx.request()接口把js_code发送到服务器后台
在服务器后台,已知appId、secret、js_code
然后调用官方提供的http接口,即可返回获取openId、session_key
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
// 登录
wx.login({
success: res => {
// ------ 获取凭证 ------
var code = res.code;
if (code) {
// console.log('获取用户登录凭证:' + code);
// ------ 发送凭证 ------
wx.request({
url: '后台通过获取前端传的code返回openid的接口地址',
data: {
code: code
},
method: 'POST',
header: {
'content-type': 'ap