前端学习之前端触发微信云函数接口

前言

其实不是前端直接去触发微信云函数的接口,而是通过nginx服务器代理的方式,再通过ajax请求微信云函数的接口,具体代码如下:

nginx代理可以参考我的另一篇博文https://www.cnblogs.com/interesting-whh/p/13915716.html

layui.define(['jquery', 'layer'], function(exports){
    var $ = layui.$;
    const APPID = "";//微信小程序appid
    const APPSECRET = "";//微信小程序密钥
    const URL = `/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`;
    var Access_Token = '';

    // name:'云函数名称',param: {参数}}
    function invokecloudfunction(access_token, name, param) {
        const FUNCTION_NAME = 'sum';
        const ENV = 'quant-cloud-qurvj';
        const INVOKE_CLOUD_FUNCTION_URL = `/tcb/invokecloudfunction?access_token=${access_token}&env=${ENV}&name=${name}`;

        return new Promise((resolve, reject)=>{
            $.ajax({
                type: "post",
                ///tcb/invokecloudfunction?access_token=ACCESS_TOKEN&env=ENV&name=FUNCTION_NAME
                url: INVOKE_CLOUD_FUNCTION_URL,
                // 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14...
                // 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"}
                data: JSON.stringify(param),
                //请求头部设置
                contentType: "application/json; charset=utf-8",
              //  dataType: "json",
                success: function(res) {
                    if(res.errmsg == 'ok')
                        resolve(res)
                    else 
                        reject(res);
                }
            });
        })
        
    }
    // 获取token
    function getAccessToken() {
        return new Promise((resolve, reject)=>{
            $.getJSON({
                url: URL,
                success: (res) => {
                    if(res.errmsg){
                        reject(res)
                    }
                    else if(res.access_token){
                        resolve(res.access_token)
                    }
                }
            })
        })
    }

    // name:'云函数名称',param: {参数}, callback: function回调
    function call(name, param, callback){
        getAccessToken().then( res => {
            return invokecloudfunction(res, name, param)
        }).then(res => {
            if(typeof callback == 'function' && res.errmsg == 'ok'){
                callback(JSON.parse(res.resp_data))
            }
            else console.log(res)
        }).catch( err => {
            console.log(err)
        })
    }

    exports('cloudFunction', {
        call:call,
        getAccessToken: getAccessToken,
        invokecloudfunction: invokecloudfunction
    });
})

就这么简单,有问题再说

原文地址:https://www.cnblogs.com/interesting-whh/p/13918079.html