微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法 (2)

开发者可以使用 AppID 和 AppSecret 调用本接口来获取 access_token。AppID 和 AppSecret 可登录微信公众平台官网-设置-开发设置中获得(需要已经绑定成为开发者,且帐号没有异常状态)。AppSecret 生成后请自行保存,因为在公众平台每次生成查看都会导致 AppSecret 被重置。注意调用所有微信接口时均需使用 https 协议。如果第三方不使用中控服务器,而是选择各个业务逻辑点各自去刷新 access_token,那么就可能会产生冲突,导致服务不稳定。

 

微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法

 

 

2.3.2 发送模板消息

 

微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法

可以看到发送模板消息,需要首先获取用户的openid。

2.4 openid的获取

下面转到openid的获取

网上都说openid可以调用wx.login函数获取到code之后获取openid。下面网址是wx.login获取openid的官方介绍。

如下图所示,利用接口地址获取到openid。

 

微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法

 

将上述地址利用wx.request访问时,在小程序中会报错,api.weixin.qq.com不在合法域名范围内等。在之前貌似可以直接通过在小程序后端添加合法域名就可以解决,如下图所示。网上教程大都这样解释。但是现在api.weixin.qq.com并添不进去。

 

微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法

 

但是大多数人都没有注意后面官方给出的登录时序图,从下图可以看出,上述接口地址是要通过第三方服务器访问微信服务器才能获得openid的。在小程序中不能直接访问,所以这就限制了没有服务器的开发者,比如我。那么怎么办呢,

 

微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法

 

 

三、模板消息解决办法

在这里可以选用Bmob的后端云服务器。

下面是Bmob的官方教程

https://docs.bmob.cn/data/wechatApp/b_developdoc/doc/index.html#小程序模板消息

 

微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法

 

要将上图中前四部规规矩矩的配置好,并试验添加一行数据可否正常运行已检验Bmob与小程序配置正常。

 

话不多说 上代码

 

Wxml文件代码:

 

<form bindsubmit="formSubmit" report-submit='true'> //主要是这行代码要有

 

  <!-- <button form-type='submit'>submit</button> -->

    <view bindtap="noneWindows">取消</view>

    <button loading="{{loading}}" formType="submit">提交</button>  //然后在有个按钮就行了

  </view>

</form>

 <button type='primary' bindtap='zhuce'>注册</button>   //用来获取openid的按钮,openid的内容后续会讲解

 

Js代码:

 

var Bmob = require("../utils/bmob.js");

var common = require("../utils/common.js");//配置按照教程来

Bmob.initialize("这两个字符串教程里面有 要保证是自己的 不能复制别人的", "");

 

var openid;//储存openid

 

zhuce:function(){

    wx.login({

      success:function(res){

        if (res.code) {

          //发起网络请求

          console.log(res.code)

 

          Bmob.User.requestOpenId(res.code, {

            success: function (result) {

              that.setData({

                loading: true,

                url: result.openid

              })

              console.log(result.openid)

              openid = result.openid

            },

            error: function (error) {

              // Show the error message somewhere

              console.log("Error: " + error.code + " " + error.message);

            }

          });

        } else {

          console.log('获取用户登录态失败!' + res.errMsg)

          common.showTip('获取用户登录态失败!', 'loading');

        }

      }

    })

  }

 

 

 

formSubmit: function (e) {

    var that = this

console.log(e.detail.formId)

 

    var temp = {

      "touser": openid, //

      "template_id": "参数template_id为在微信公众号获取到的模板Id",

      "page": "",//跳转界面 不填就没有跳转

      "form_id": e.detail.formId,

      "data": {

        "first": {

          "value": "您好,Restful 失效,请登录控制台查看。",

          "color": "#c00"

        },

        "keyword1": {

          "value": "339208499",

          "color": "#173177"

        },

        "keyword2": {

          "value": "339208499",

          "color": "#173177"

        },

        "keyword3": {

          "value": "339208499",

          "color": "#173177"

        },

        "remark": {

          "value": "如果您十分钟内再次收到此信息,请及时处理。"

        }

      },

      "emphasis_keyword": ""

    }

    console.log(temp)

    Bmob.sendMessage(temp).then(function (obj) {

      console.log('发送成功')

    },

      function (err) {

        common.showTip('失败' + err)

        console.log(err)

      });

  },

 

为什么能解决问题呢,主要是bmob服务器帮你把你服务器上的事完成了,bomb向微信服务器请求openid。

 注意要用手机调试运行。开发工具的模拟器获取到的formId是个模拟值。下面是我的运行情况

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwyjf.html