- 微信小程序登录,拿Access Token后拿unionid,总是提示40001错误,是怎么回事?
access_token =get_fuwuhao_access_code_token(appid, secret) # 获取用户信息 user_info_url = f"https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}&lang=zh_CN" user_info_response = requests.get(user_info_url) user_info = user_info_response.json() print("user_info=", user_info) 供调用的get_fuwuhao_access_code_token(appid, secret)函数: def get_fuwuhao_access_code_token(appid, secret): global access_token_cache current_time = int(time.time()) # 检查access_token是否过期 if access_token_cache['access_token'] and access_token_cache['expires_time'] > current_time: return access_token_cache['access_token'] # Access Token已过期,重新请求 url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}" response = requests.get(url) data = response.json() if "access_token" in data: access_token_cache['access_token'] = data['access_token'] # Token的有效期为7200秒 access_token_cache['expires_time'] = current_time + data['expires_in'] - 200 # 提前200秒请求 print("Access Token:为什么会有两次???", access_token_cache['access_token']) return access_token_cache['access_token'] else: print(f"Error getting access token: {data}") return None 输出: Access Token:为什么会有两次??? 85_hnWbFNovs2Ka8igUyTXVGSU2*****XsDKdzztBsGLZfADANSG user_info= {'errcode': 40001, 'errmsg': 'invalid credential, access_token is invalid or not latest, rid: 6711f741-3aa94e06-51bc0419'} 老是报这个40001的错误,说access_token无效或不是最新的。我想拿登录小程序的用户的unionid,是哪里有问题吗?能帮我改改吗?谢谢
10-18 - 微信小程序获取手机号,必须通过按钮点击触发吗?谢谢
我想把获取手机号的代码,写在onLoad里面,可是总是报错: {errMsg: "authorize:fail 系统错误,错误码:-12001,invalid scope"} onLoad(){this.requestPhoneNumberAuthorization(); }, methods: { requestPhoneNumberAuthorization() { // 检查用户授权状态 wx.getSetting({ success: (res) => { if (!res.authSetting['scope.phoneNumber']) { // 如果用户没有授权手机号,自动请求授权 wx.authorize({ scope: 'scope.phoneNumber', success: () => { // 请求成功,可以请求用户手机号 wx.getPhoneNumber({ success: (res) => { this.decryptPhoneNumber(res); }, fail: (error) => { console.log("获取手机号失败:", error); } }); }, fail: (error) => { console.log("用户拒绝授权:", error); } }); } else { // 用户已经授权,可以直接获取手机号 wx.getPhoneNumber({ success: (res) => { this.decryptPhoneNumber(res); }, fail: (error) => { console.log("获取手机号失败:", error); } }); } }, fail: (error) => { console.log("获取设置失败:", error); } }); }, 这样写,总是报错: 用户拒绝授权: {errMsg: "authorize:fail 系统错误,错误码:-12001,invalid scope"} 出现不了让用户 授权或者拒绝 的界面,是怎么回事?是必须有按钮触发?还是我的代码有问题?谢谢!如果是按钮触发,有文档写着吗?文档链接是多少?谢谢
09-03 - minium报错:skyline页面暂不支持get_element方法,怎么办?
#!/usr/bin/env python # -*- coding: utf-8 -*- # 公众号:伤心的辣条 import minium import time class MyTest(minium.MiniTest): def test_view(self): self.page.get_element("view", inner_text="视图容器").click() self.page.get_element(".navigator-text", inner_text="swiper").click() self.page.get_elements("switch")[0].click() self.page.get_elements("switch")[1].click() assertValue1 = self.page.get_element(".weui-cell__bd").text self.assertEqual("指示点", assertValue1) time.sleep(0.5) self.app.navigate_back() def test_form(self): self.page.get_element("view", inner_text="表单组件").click() self.page.get_element(".navigator-text", inner_text="textarea").click() self.page.get_element("page > view > view > view:nth-child(1) > view.textarea-wrp > textarea").click() self.page.get_element("page > view > view > view:nth-child(1) > view.textarea-wrp > textarea").input("小程序自动化测试") assertValue2 = self.page.get_element("page > view > view > view:nth-child(1) > view.textarea-wrp > textarea").text self.assertIn("小程序", assertValue2) time.sleep(0.5) self.app.navigate_back() if __name__ == "__main__": my_test = MyTest() my_test.test_view() my_test.test_form() 上面的代码,来源https://blog.csdn.net/m0_67695717/article/details/133305956,我安装好minium后,运行报错: File "D:\myProgram\ideaJava\yiZhiXiangMuZu\maoYuFanYi\wx-miniprogram-test\venv\lib\site-packages\minium\miniprogram\base_driver\page\skylinepage.py", line 19, in wrapper raise NotImplementedError(f"skyline页面暂不支持{func.__name__}方法") NotImplementedError: skyline页面暂不支持get_element方法 小程序是官网给的小程序代码。代码来源:https://developers.weixin.qq.com/miniprogram/dev/devtools/auto/demo.html 谢谢
06-20 - 微信开发者工具的自动化测试功能,为何不支持中文路径了?
const automator = require('miniprogram-automator') automator.launch({ cliPath: "D:\\weixin_web_gongju\\cli.bat", // 工具 cli 位置,如果你没有更改过默认安装位置,可以忽略此项 //cliPath:"D:\\Program Files (x86)\\Tencent\\微信web开发者工具\\cli.bat", projectPath: 'aa-demo', // 项目文件地址 }).then(async miniProgram => { const page = await miniProgram.reLaunch('/page/component/index') await page.waitFor(500) const element = await page.$('.kind-list-item-hd') console.log(await element.attribute('class')) await element.tap() await miniProgram.close() }) 用 D:\\weixin_web_gongju\\cli.bat ,就能找到cli.bat,但是用 D:\\Program Files (x86)\\Tencent\\微信web开发者工具\\cli.bat,始终找不到cli.bat。难道真是中文路径的问题?这个路径是安装 微信开发者工具的时候,自动给的(我只是将C盘改为了D盘)。为什么自动化工具,不支持中文路径了?谢谢
06-19 - 微信小程序,自己的后端,收到的推送消息,能看到消息内容吗?
https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html 自己写了个接收消息的后端,但没有测试好,就上线了。导致很多客服消息,全被推送至这个接口。客服人员无法收到消息,而后端收到后也没有处理。 @app.route('/xiaoXiTuiSong', methods=['GET']) def get_echostr(): echostr = request.args.get('echostr') if echostr: return echostr else: return 'Echostr 参数不存在' @app.route('/xiaoXiTuiSong_post', methods=['POST']) def get_echostr_post(): if request.method == 'POST': data = request.form echostr = data.get('echostr') if echostr: return echostr else: return 'Echostr 参数不存在' else: return '只支持 POST 请求' 比如,后端收到:162.62.80.57 - - [24/May/2024 16:24:18] "POST /xiaoXiTuiSong?signature=d08839f4131ed8a88ebbd5943a0ae31906e2fff6×tamp=1716539058&nonce=266432552&openid=oRYzE6-ATJ5pr01MT3PY2YzdTWdQ&encrypt_type=aes&msg_signature=c6b772a1f0da76aad0dd707563ef23028b29a4e8 HTTP/1.1" 405 - 类似的消息,能还原出来 客服发来的是什么消息内容吗?谢谢
05-24 - 微信 发送订阅消息,value里,值里面不能用符号,怎么办?
https://cloud.tencent.com/developer/article/1914364 url_msg = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send' body = { "touser": "oyLvs4hcubi5-FhfYVqH2VJGKIN4", # 也就是OPENID "template_id": "Ou27mwu5QLHaL-sxYfka1eecqHhyuXxllHKVuZTUIN0", "page": "pages/index/index", "form_id": "FORMID", # 这个应该是来源场景值ID吧,我这里没有用到 "data": { "date2": { "value": "2020-03-19 14:35:30" }, "thing3": { "value": "firegod" }, "thing7": { "value": "服务器内存低于256MB" } } } value里,值里面不能用符号,怎么办?比如 "value": "服务器内存低于256MB",改为 "服务器内存低于256MB,硬盘512G",就不行,报: {"errcode":47003,"errmsg":"argument invalid! data.thing1.value invalid rid: 664dbc35-4e92355b-4566d61e"} 怎么解决这个问题?谢谢
05-22 - uni.chooseMessageFile ,为何一选中某个文件,就是mp3后缀啊?
chooseFile() { console.log("choose mp3 file"); console.log("selectedUrl=", selectedUrl) uni.chooseMessageFile({ count: 1, type: 'file', success: (res) => { console.log("res.tempFiles=",res.tempFiles) const filePath = res.tempFiles[0].path; console.log("上传mp3,filePath=",filePath) console.log("上传mp3,name=",res.tempFiles[0].name) 这个filePath= wxfile://tmp_8414e888f94981725889534d27d1ffa93b980b7a61982f7f.mp3,而name= tmp_e87ea990d0c58140a40007b85bbf4565c6a46a896253d282.m4a 也就是说,我选中的是一个m4a文件,为何filePath还是以mp3结尾呢?谢谢,奇怪
05-11 - wx.chooseMessageFile(OBJECT)这个函数,能拿到原始的文件名吗?
wx.chooseMessageFile({ count: 1, type: 'file', success: (res) => { const filePath = res.tempFiles[0].path; console.log("上传mp3,filePath=",filePath) 这段代码,filePath 是微信的临时文件名,比如 filePath= wxfile://tmp_6cc43513708037c36e51d29f1a42ea1c4a52830c5e9fc845.mp3 但显然,用户上传的时候,是一个更好记的名字,比如"测试一下.mp3", 如何拿到这个文件名?有这个好记的名字,我后端更容易排查问题。
05-11 - ios系统里,微信小程序不用调用微信支付购买会员吗?
听说ios系统里,微信小程序 里,是调不起微信支付的。是真的吗?做h5好麻烦
05-09 - uniapp,微信小程序,如何一次性的拿到openId对应的表里的记录id啊?
我的小程序,必须这个id,才能继续后面的数据库操作。就是app,首先必须登录一样。可是把uni.login({ provider: 'weixin', //使用微信登录 success:(res)=>{} 这个登录方法,写在App.vue的onLaunch里,有时候并不是首先就执行这个登录代码。我现在为了拿到id,把这个uni.login写在了3个地方(分别是App.vue的onLaunch里,index.vue的onLoad里,index.vue的onShow里),id是拿到了,可是代码太难看了。有没有办法,一次性的拿到id?拿不到id,就等待,拿到id才往后执行?有这种办法吗?谢谢
03-07