小程序 Request报错401 Unauthorized错误
发布于 5 年前 作者 jing71 14528 次浏览 来自 问答

新建一个默认的小程序,使用真实的AppID,在app.js的wx.login中添加向后台请求的代码,报告401 Unauthorized错误。代码如下图:

程序运行输出结果如下图:

10 回复

 To 风淡云轻:

现在的情况是这样的:

1、浏览器里面输入服务接口,能正常返回了。无论内网、还是外网,甚至手机上,都可以的。如下图:

2、小程序开发工具中,调用服务接口,还是报告错误。根据你的提示,分别用json和string传参数,报告的错误不一样:json时报告401错误,string时报告500错误。分别如下图:

图一:json

图二:string

昨天找错误原因时,发现443端口没开。开了后还是不同,后来同事修改了服务器系统的temp文件夹的权限,增加了IIS-User用户的写入权限,在浏览器中直接输入服务接口就通了,就变成上面的情况了。

我估计,是不是域名的权限设置、或者服务器的权限设置有问题。

PS:目前的服务器是虚拟机上运行的。

麻烦风淡云轻及各位再帮给看看,项目要验收了,心里真着急啊。

现在在开发工具里再访问一次看看,记得截个图

各位大神!如果是这个错误呢?

下面这个data打开是这样的

谢谢 风淡云清! ,已解决这个问题,是我接口的问题。

有application/string这个说法吗?换x-www-form-urlencoded试试:比如这个是我在项目中用的,后台thinkphp框架,亲测是能用的,你可以参照着改改用用看

var requestUrl = function (option, cb) {
    option = option || {}
    option.url = url + option.action
    option.data = option.json ? { wx_param: JSON.stringify(option.param) } : option.param,
    option.method = option.method || 'POST'
    option.navigationLoading = option.navigationLoading === false?false:true
    option.header = option.header || {}
    if (!option.header['content-type']) {
        option.header['content-type'] = 'application/x-www-form-urlencoded'
    }
    option.header['X-Requested-With'] = 'XMLHttpRequest'
    option.dataType = option.dataType || 'json'
 
    var session = wx.getStorageSync('session');
    var ts = Date.parse(new Date) / 1000
     
    if (session && session.id && session.expire > ts) {
        option.header.Cookie = 'PHPSESSID=' + session.id
    }
    else {
        if (option.action != 'User/login') {
            !option.navigationLoading && wx.showNavigationBarLoading()
            _login(ssid => {
                option.header.Cookie = 'PHPSESSID=' + ssid
                option.complete = function(rlt2){
                    !option.navigationLoading && wx.hideNavigationBarLoading()
                    if (!_showErr(rlt2.data)) {
                        cb && cb(rlt2.data)
                    }
                }
                wx.request(option)
            })
            return
        }
    }
    !option.navigationLoading && wx.showNavigationBarLoading()
    option.complete = function (rlt2) {
        !option.navigationLoading && wx.hideNavigationBarLoading()
        if (rlt2.data.status == -200) {
            _login(ssid=>{
                option.header.Cookie = 'PHPSESSID=' + ssid
                option.complete = function(rlt3) {
                    !option.navigationLoading && wx.hideNavigationBarLoading()
                    if (!_showErr(rlt3.data)) {
                        cb && cb(rlt3.data)
                    }
                }
                wx.request(option)
            })
        }
        else {
            if (!_showErr(rlt2.data)) {
                cb && cb(rlt2.data)
            }
        }
 
    }
    wx.request(option)
}

再有,你的iis的安全配置要允许匿名登录

 19楼:

你说的是什么意思?我没有直接访问443端口呀?

薛磊啊! 时间老长了,我都快忘了,刚又从头捋了一遍,什么意思你再说说,什么环境,后台什么框架!

还有一点,在php环境中,content-type为json的情况下,后台服务器根本无法拿到param的参数,asp不知道有没有这样的问题,所以你的login先不要改动,看看能不能得到目前浏览器里一样的输出

你直接访问443端口,不加https协议当然访问不了

回到顶部