个人案例
- 机场货运大数据
机场货运大数据
机场货运大数据扫码体验
- 【微信小程序备案】9月1日起,微信小程序需完成备案才可上架!已上架用户,查看这份备案手册,快人一步,抢先备案!
自2023年9月1日起,微信小程序必须完成备案后才可上架;已经上架的小程序,要于2024年3月31日前完成备案,若逾期未完成备案,微信官方平台会按照相关规定于2024年4月1日起进行清退处理,目前备案通道暂未开启,9月1号正式开启备案通道,来一间商户,可提前准备资料,熟悉流程! 备案需要准备哪些资料 主办单位证件(营业执照) 主体负责人证件(身份证) 小程序负责人证件(身份证) 需要小程序负责人扫脸验证 其他材料:根据各省通信管理局要求,上传对应补充材料。 备案流程 ➤ 登录小程序管理后台([https://mp.weixin.qq.com/])首页顶部会提示“小程序需补充备案信息”,点击“去备案”;也可以在小程序管理后台设置模块-小程序备案-点击去备案,填写备案信息,并上传材料 ➤ 1-2个工作日内完成初审并告知结果 ➤ 提交通管局后,24小时内完成短信核验 ➤ 通管局在1-20个工作日内完成审核并告知结果 ➤ 审核通过后,下发小程序备案号 备案信息填写 1、主体信息填写 分个人主体和非个人主体 [图片] (非个人主体) [图片] (个人主体) 提示:选择地区、详细地址,请填写实际通讯地址。 上传有效证件原件的彩色扫描件或拍照件,请保持图片清晰完整、不遮挡关键信息/图像、边角齐全,证件有效期大于1个月。 请对照证件信息如实选择、填写备案信息。 2、主体负责人信息填写 提示:手机号码请填写主体负责人、应急联系人本人使用的有效手机号码,需保持电话畅通,不同人不能使用同一个号码 [图片] 3、小程序信息填写 [图片] 4、小程序负责人信息填写及人脸核身 如果小程序负责人和主体负责人一致,可直接复用主体人信息,如不一致,需手动填写小程序负责人信息。 [图片] 平台初审 开发者在微信公众平台提交小程序备案信息后,平台将会在1-2个工作日内完成初审(具体请以实际审核时间为准),审核结果将以站内信息、模板消息等形式通知管理员。在平台初审的过程中,请备案相关人员保持电话畅通,以便平台对你提交的备案信息进行核验。 工信部短信核验 根据工信部的要求,小程序备案需完成短信核验。你的备案初审通过后,会收到工信部发送的核验短信(发送号码:12381),请在收到短信的24小时内登录工信部备案官网首页完成短信核验,短信核验成功后备案申请进入通管局审核流程。 若核验时提示验证码错误或无效,你可触发一次短信重发;24小时内未核验成功,备案将被工信部系统自动驳回,你需到微信公众平台重新提交备案申请 [图片] [图片] 通管局审核 各省通信管理局将在1-20个工作日内(具体以实际审核时间为准)完成审核,审核结果以站内信、模板消息、短信等形式通知。 备案成功 管局审核通过后,将下发的小程序备案号,代表你的小程序已完成备案,可以进入下一步版本发布等流程。 [图片] 此备案流程仅适用酒旅商家操作,如需查看更多,请查看微信小程序官方备案操作指引
2023-08-28 - 小程序备案内容个人整理
注:以下资料来自官方文档 相关内容具有时效性 仅适用发文章时点。 官方文档地址:传送门 官方常见备案问题:传送门 一、几个时间点 自2023年09月01日起,新的微信小程序,必须备案后才能上架; 在2024年03月31日前,所有小程序都必须完成备案; 于2024年04月01日起,对未备案小程序进行清退处理。 微信小程序备案系统已于9月4日上线。 二、备案流程 [找备案入口]–[填主体信息]–[填小程序信息]–[初审]–[短信核验]–[通管局审核] 1,在小程序后台找到备案入口 [图片] [图片] (1)新的未上架小程序,可以在小程序首页点击【去备案】进入。 (2)已上架小程序,可以在设置-基本设置中找到【去备案】入口。 或者在小程序后台顶部会出现补充备案的提醒,也可以进入备案。 注:截止文章发稿时,官方后台暂时尚未出现相关入口,应是9月1日后出现。 2,填写备案主体信息 (1)选地区、主办者性质(个人或企业)、相关证件与上传、通讯地址等。 (2)还需要填写主体负责人信息,应急联系人手机号等。 3,小程序信息填写 (1)小程序的APPID、名称,会自动显示,然后需要选服务标识,选择是否包括“互联网信息服务前置审批项”内容。 (2)若存在前置审批项(小程序从事新闻、出版、药品和医疗器械、网约车等),需提供业务对应前置审批文件。 (3)还需要填写小程序负责人信息,包括证件、手机号、应急手机号、邮箱,需要负责人人脸核身。 4,平台初审 平台将会在1-2个工作日内完成初审。 审核结果将以站内信、模板消息等形式通知管理员。 需保持相关人员电话畅通,平台可能会进行核验。 5,工信部短信核验 初审通过后,会收到工信部发送的核验短信(来自12381); 你需要24小时内登录工信部备案首页完成短信核验。 核验成功后,备案进入通管局审核流程。 6,通管局审核 各省通信管理局将在1~20个工作日内完成审核。 审核结果以站内信、模板消息、短信等形式通知。 7,备案成功 管局审核通过后,将下发的小程序备案号。 三、相关证件与资料 1,个人主体 身份证(正反面上传,大小不超过200K,分辨率不低于15001100,证件有效期大于1个月) *通讯地址 *手机号(会验证码确认) *应急手机号(不得与负责人手机号相同) *人脸核身(背景应为纯白色,不遮挡面部) 2,非个人主体 *营业执照(或组织机构代码证等主体证件) *通讯地址 *负责人身份证 *负责人手机号(会验证码确认) *应急手机号(不得与负责人手机号相同) *负责人 人脸核身(背景应为纯白色,不遮挡面部) *涉及前置审批的,还需准备前置审批相关材料 四、其他 1,与网站ICP备案流程相似,可以参考。 2,小程序备案是免费的。 3,或许社区会出现小程序备案的小主页(然而并没有)。 4,建议关注社区负责备案问题的官方专员:小程序运营专员-wwen 5,存量小程序(即2023年9月4日前已上架发布的)的备案开放时间可能会在10月份,以官方通知为准。 6,当日备案小程序数量存在系统限制,估计备案的太多了。 7,即刻起小程序备案必须先进行微信认证才可以(官方理由是整治虚假备案与提交)。 8,服务商代备案接口:传送门 9,提示手机号不允许被多人使用,这是指同一个人允许为多个小程序备案,可以提交一致的手机号及邮箱,但不能出现不同人共用手机号/邮箱的情况。 10,提示同一主体不能同时备案多个。 是因为若备案主体从未在管局备案过,需首个备案小程序审核通过后才可以进行下一个小程序备案。 11,备案号会出现在小程序更多资料中,无需开发人员自行放置。 12,若近期新建企业,或近期有做信息变更,企业工商数据更新可能有延迟,建议过段时间(5~15天)再试。 13,若个体工商户无公章,需要主体负责人手写日期+签名+盖手印+身份证号码,同时请在主体备注处备注“个体工商户无公章”。 14,当个人主体小程序备案申请人的身份证证件地址与申请小程序备案的省份不一致时,需要提供暂住证或居住证等证明材料。 涉及省份包括:吉林、上海、江苏、浙江、安徽、山东、湖北、广东、四川、贵州、云南。 15,小程序备案主体负责人必须填写法定代表人吗? [图片] 16,负责人姓名已填写为小程序管理员的姓名,为什么还是提示:负责人与小程序管理员不一致? 出现这种提示一般都是第三方服务商协助创建的小程序未完善管理员实名信息,需补充管理员实名信息后才能进行备案,补充指引参考: 小程序MP后台-成员管理-管理员-修改。 验证原管理员-填写原管理员身份证信息-扫码验证。 绑定新管理员-填写【原管理员的信息】并提交,即完成管理员实名信息补充。 *请以官方文档、通知为准。 (2023.09.21)
2023-10-13 - 小程序基础库 3.0.0 更新
各位微信开发者: 小程序基础库 3.0.0 已经开始灰度开发者,请大家基于业务情况关注相关变更。如遇问题请及时在该帖下方留言或在小程序交流专区发表标题包含「基础库3.0.0」的帖子反馈。 本次更新正式发布以下三大特性: 1、Skyline 渲染引擎发布正式版 为了进一步优化小程序性能,提供更为接近原生的用户体验,我们推出了一套新渲染引擎 Skyline。在经过近一年的 beta 版测试后,Skyline 已经趋于稳定。我们修复了大量问题并进行了诸多性能优化,使线上的小程序能够稳定运行且性能表现更优。此外,为了让开发者能更快迁移,我们支持了大多数常用的 CSS 特性,同时还添加了许多高级特性,以帮助开发者构建类原生体验的小程序。更多详细的信息请查阅 介绍文章。 2、XR-FRAME 发布正式版 经过迭代,我们补齐了XR-FRAME的许多基础能力,并针对稳定性等问题做了针对性的优化。XR-FRAME是一个基于小程序开发方案、高性能、渐进式的3D/XR开发框架。开发者可以非常简单得使用WXML便可构造出一个酷炫的3D小程序,并且还广泛支持了AR、物理、交互、粒子、后处理、视频等等能力,同时也能够满足服务商等高级用户各种进阶的定制需求。我们仍在不断迭代新功能,跟着这篇文档可以了解XR-FRAME框架并开始你的开发:开始入门。 3、推出新版组件框架 glass-easel glass-easel 是新一代的小程序页面和自定义组件框架,旨在替代老旧的组件框架,提供更好的性能和更多的特性。现在,我们率先在 Skyline 环境下引入,成为默认的组件框架。glass-easel 几乎完整兼容了旧版框架,仅有极个别的接口被废弃移除,在提升性能的同时,添加了诸多特性,如 Chaining API、动态 slot、在模板中调用 data 里的函数等,更多详细的信息请 查阅文档。 更多更新内容: 新增 框架 新增 wx.getCommonConfig 接口 详情新增 组件 scroll-view 支持下拉二楼交互 详情更新 框架 glass-easel 在兼容模式下运行时使用 wxs 事件响应函数的 ComponentDescriptor#getState 方法 更新 框架 scroll-view 支持 min-drag-distance 属性 详情更新 框架 video 组件遮罩逻辑导致全屏投屏按钮无法点击 详情更新 框架 sticky-header 支持 top 偏移 详情更新 框架 skyline 支持 css animation 事件 更新 框架 启动页无法绑定自定义路由 详情更新 框架 更新 scroll-view / grid-view / list-view / sticky-header / sticky-section 组件支持 padding 属性,设置组件内部的内边距 详情 更新 框架 XR-FRAME VideoTexture 发布正式版 详情更新 框架 Skyline 渲染引擎下,组件框架切换为 glass-easel 详情更新 组件 skyline button 组件 loading 属性添加动画 更新 API 基础库支持 visionkit depth 功能 详情修复 框架 scroll-view 封装成组件时 scroll-into-view 无法跳转 修复 框架 skyline 内存泄漏问题修复 框架 skyline input/textarea 组件获取焦点相关问题 修复 框架 skyline 下部分组件事件无法使用 wxs 函数响应的问题 修复 组件 video 视频遮罩报错修复
2023-07-19 - 如何解决“Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用”报错?
错误原因: 微信开发者工具从 1.05.2201210 版本开始,对小程序项目新增了无依赖文件过滤能力。 如果某个 js 文件被静态分析显示是无依赖文件,在实际运行时又被其他 js 文件 require 引用了,则会在工具模拟器中报错这个错误。 此时,如果你继续预览或者上传代码,则在真机运行环境中会报 xxx.js is not defined 的错误。 解决方式: 修改依赖引用的代码:可根据控制台中的【代码依赖分析异常】提示进行修改。(推荐)关闭过滤无依赖文件:project.config.json 中 settings 选项添加 ignoreDevUnusedFiles: false , ignoreUploadUnusedFiles: false详细分析: 微信开发者工具的无依赖文件过滤能力,是基于代码静态依赖分析的数据来实现的。 也就是会分析小程序项目中的代码内容,如果发现某个 js / wxml / wxss / json 文件没有被使用到,则会将其列为无依赖文件。 无依赖文件在模拟器运行时会被忽略,在上传时也不会打入代码包中,因此可以有效减少代码包大小。 但由于 js 代码的灵活性,代码静态依赖分析功能在某些情况下,无法准确分析出依赖引用关系(控制台中会有对应的 warning 提示),此时部分 js 文件会被误判为无依赖文件,导致报错。开发者需配合提示信息修改代码,才能继续使用此功能。 导致依赖异常的常见情况: 动态引用的情况,如 var a = 'somefile.js'; require(a);将 require 函数赋值给其他变量的情况,如 var a = require; a('somefile.js');
2022-07-04 - 小程序用户信息相关接口调整公告
为进一步规范开发者调用用户信息相关接口或功能,提升用户体验,平台将对部分用户信息相关功能及接口进行调整,具体如下: 访问蓝牙、添加通讯录联系人、添加日历事件需要用户授权小程序处理用户的个人信息,需要获取用户明示同意,平台计划从2022年2月21日24时起对以下接口增加用户授权: 访问蓝牙:调用wx.openBluetoothAdapter、wx.createBLEPeripheralServer,需要授权scope.bluetooth添加通讯录联系人:调用wx.addPhoneContact,需要授权scope.addPhoneContact添加日历事件:调用wx.addPhoneRepeatCalendar、wx.addPhoneCalendar,需要授权scope.addPhoneCalendar开发者可在平台调整前提前增加使用 wx.getSetting 获取用户当前的授权状态的逻辑,若授权状态为false可以调用 wx.openSetting 打开设置界面,引导用户开启授权。 授权功能详细说明可参考:官方文档 <open-data>组件功能调整开发者在未获取用户明示同意的情况下通过 <open-data>组件 在小程序中展示用户个人信息,用户容易误以为自己的个人信息在未授权的情况下,被小程序获取。平台计划从2022年2月21日24时起回收通过<open-data>展示个人信息的能力,若小程序需收集用户昵称头像等信息,可以通过 头像昵称填写功能 功能进行收集。具体回收方式为: 头像展示 灰色头像用户昵称展示“微信用户”用户性别、地区、语言展示为为空(“”)小程序通过<open-data>展示群名称能力保留,平台会针对小程序生命周期内首次调用该组件展示群名称向用户提示:“群名称仅你可见,小程序无法获取。” 获取手机号能力安全升级此前小程序获取用户手机号是通过基础库接口直接获取encryptedData后进行解密。从基础库2.21.2版本起,回调参数中增加code参数,开发者获取code参数后,通过服务端auth.getPhoneNumber接口,使用code换取encryptedData,用于解密手机号。 为不影响开发者现有逻辑,原有基础库接口中的encryptedData参数依旧保留,建议开发者尽快使用新的方式获取用户手机号。 详细功能描述可参考 官方文档 微信团队 2021年12月27日
2023-09-26 - 小程序用户头像昵称获取规则调整公告
更新时间:2022年11月9日由于 PC/macOS 平台「头像昵称填写能力」存在兼容性问题,对于来自低于2.27.1版本的访问,小程序通过 wx.getUserProfile 接口将正常返回用户头像昵称,插件通过 wx.getUserInfo 接口将正常返回用户头像昵称。 更新时间:2022年9月28日考虑到近期开发者对小程序用户头像昵称获取规则调整的相关反馈,平台将接口回收的截止时间由2022年10月25日延期至2022年11月8日24时。 调整背景在小程序内,开发者可以通过 wx.login 接口直接获取用户的 openId 与 unionId 信息,实现微信身份登录,支持开发者在多个小程序或其它应用间匿名关联同一用户。 同时,为了满足部分小程序业务中需要创建用户的昵称与头像的诉求,平台提供了 wx.getUserProfile 接口,支持在用户授权的前提下,快速使用自己的微信昵称头像。 但实践中发现有部分小程序,在用户刚打开小程序时就要求收集用户的微信昵称头像,或者在支付前等不合理路径上要求授权。如果用户拒绝授权,则无法使用小程序或相关功能。在已经获取用户的 openId 与 unionId 信息情况下,用户的微信昵称与头像并不是用户使用小程序的必要条件。为减少此类不合理的强迫授权情况,作出如下调整。 调整说明自 2022 年 10 月 25 日 24 时后(以下统称 “生效期” ),用户头像昵称获取规则将进行如下调整: 自生效期起,小程序 wx.getUserProfile 接口将被收回:生效期后发布的小程序新版本,通过 wx.getUserProfile 接口获取用户头像将统一返回默认灰色头像,昵称将统一返回 “微信用户”。生效期前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。自生效期起,插件通过 wx.getUserInfo 接口获取用户昵称头像将被收回:生效期后发布的插件新版本,通过 wx.getUserInfo 接口获取用户头像将统一返回默认灰色头像,昵称将统一返回 “微信用户”。生效期前发布的插件版本不受影响,但如果要进行版本更新则需要进行适配。通过 wx.login 与 wx.getUserInfo 接口获取 openId、unionId 能力不受影响。「头像昵称填写能力」支持获取用户头像昵称:如业务需获取用户头像昵称,可以使用「头像昵称填写能力」(基础库 2.21.2 版本开始支持,覆盖iOS与安卓微信 8.0.16 以上版本),具体实践可见下方《最佳实践》。小程序 wx.getUserProfile 与插件 wx.getUserInfo 接口兼容基础库 2.27.1 以下版本的头像昵称获取需求:对于来自低版本的基础库与微信客户端的访问,小程序通过 wx.getUserProfile 接口将正常返回用户头像昵称,插件通过 wx.getUserInfo 接口将正常返回用户头像昵称,开发者可继续使用以上能力做向下兼容。对于上述 3,wx.getUserProfile 接口、wx.getUserInfo 接口、头像昵称填写能力的基础库版本支持能力详细对比见下表: [图片] *针对低版本基础库,兼容处理可参考 兼容文档 请已使用 wx.getUserProfile 接口的小程序开发者和已使用 wx.getUserInfo 接口的插件开发者尽快适配。小游戏不受本次调整影响。 最佳实践小程序可在个人中心或设置等页面使用头像昵称填写能力让用户完善个人资料: [图片] 微信团队 2022年5月9日
2023-09-26 - 地理位置接口新增与相关流程调整
一、地理位置接口新增说明 由于精确地理位置接口只允许部分类目的小程序申请使用,为了满足开发者在更多场景使用地理位置接口,自 2022 年 7 月 14 日起,新增获取模糊地理位置接口(wx.getFuzzyLocation)。同时为保障用户合法权益,该接口调用前需进行准入开通申请,该接口准入规则与 wx.chooseLocation 一致。 wx.getFuzzyLocation 接口说明: 1、该接口返回的是经过模糊处理的经纬度坐标; 2、该接口支持返回 wgs84 或 gcj02 两种类型的坐标; 3、该接口需要用户授权 scope.userFuzzyLocation。 二、app.json 的配置指引 为了开发者能够正常使用获取模糊地理位置等接口,以及后续对于代码提审环节的优化(见「三、地理位置接口使用流程」),自 2022 年 7 月 14 日起,开发者在使用地理位置相关接口时(共计 8 个,见表1),需要提前在 app.json 中进行配置。 1、需配置的接口列表 [图片] 表1 2、配置规则 1)在代码中使用的地理位置相关接口(共计 8 个,见表1),开发者均需要在 app.json 中 requiredPrivateInfos 配置项中声明,代码格式如下: [图片] 2)表1中模糊位置信息(序号1)和精确位置信息(序号2-5)是互斥的,即声明了模糊位置信息就无法声明精确位置信息。若同时声明模糊位置信息和精确位置信息,则在编译代码时出现错误; 3)注意:自 2022 年 7 月 14 日后发布的小程序,如果未在 app.json 中声明表1中的相关接口,则小程序调用这些接口(表1)时会出现错误,在 2022 年 7 月 14 日之前发布的小程序不受影响; 4)对于第三方开发者,需要在上传代码时通过参数在 ext.json 中声明其需调用的地理位置相关接口,配置规则和普通小程序的配置规则相同。 三、地理位置接口使用流程 自 2022 年 7 月 14 日起,开发者如需在最新版本发布后使用地理位置相关接口,除需完成接口权限开通外,还需在 app.json(或ext.json)配置环节,具体如下: 1、接口权限开通 以下 8 个接口需完成准入开通流程:wx.getFuzzylocation、wx.getLocation、wx.onLocationChange、wx.chooseAddress、wx.choosePoi、wx.chooseLocation、wx.startLocationUpdate、wx.startLocationUpdateBackground 1)普通开发者:需要在 “小程序管理后台 -「开发」-「开发管理」-「接口设置」” 中完成权限申请; 2)第三方开发者:可通过 apply_privacy_interface 接口完成权限申请。 2、app.json(或 ext.json)配置 1)普通开发者:需在 app.json 中声明其需调用的地理位置相关接口,具体配置流程见「二、app.json 的配置指引」; 2)第三方开发者:需要在上传代码时通过参数在 ext.json 中声明其需调用的地理位置相关接口(配置方式:可通过 commit 接口配置)。 同时,为了提升开发者体验,平台在代码提审环节会协助开发者对地理位置接口进行检测,如检测出代码中包含未完成准入开通的地理位置接口,平台将再次提醒开发者确认是否需使用相关接口。 1)普通开发者:若无需使用,开发者可在提审时确认不使用该接口,即可正常进行代码提审。小程序审核通过且新版本发布完成后,平台将对小程序确认不使用的接口关闭使用权限; 2)第三方开发者:若无需使用,可在提审时通过参数声明不使用该接口(声明方式:可通过 submit_audit 接口配置),即可正常进行代码提审,审核通过后发布上线,将对其声明不使用的接口关闭使用权限。 以上调整将仅对所有小程序生效。 微信团队 2022年6月1日
2023-09-26 - 通过“获取小程序的第三方提交代码的页面配置”接口,获取的页面配置是重复的
同样的问题..半年了没人解决...我再擦亮一下.. 获取小程序的第三方提交代码的页面配置数据重复
2019-10-30 - 小程序内用户帐号登录规范调整和优化建议
为更好地保护用户隐私信息,优化用户体验,平台将会对小程序内的帐号登录功能进行规范。本公告所称“帐号登录功能”是指开发者在小程序内提供帐号登录功能,包括但不限于进行的手机号登录,getuserinfo形式登录、邮箱登录等形式。具体规范要求如下: 1.服务范围开放的小程序 对于用户注册流程是对外开放、无需验证特定范围用户,且注册后即可提供线上服务的小程序,不得在用户清楚知悉、了解小程序的功能之前,要求用户进行帐号登录。 包括但不限于打开小程序后立即跳转提示登录或打开小程序后立即强制弹窗要求登录,都属于违反上述要求的情况; 以下反面示例,在用户打开小程序后立刻弹出授权登录页; [图片] 建议修改为如下正面示例形式:在体验小程序功能后,用户主动点击登录按钮后触发登录流程,且为用户提供暂不登录选项。 [图片] 2.服务范围特定的小程序 对于客观上服务范围特定、未完全开放用户注册,需通过更多方式完成身份验证后才能提供服务的小程序,可以直接引导用户进行帐号登录。例如为学校系统、员工系统、社保卡信息系统等提供服务的小程序; 下图案例为正面示例:校友管理系统,符合规范要求。 [图片] 3.仅提供注册功能小程序 对于线上仅提供注册功能,其他服务均需以其他方式提供的小程序,可在说明要求使用帐号登录功能的原因后,引导用户进行帐号注册或帐号登录。如ETC注册申请、信用卡申请; 如下反面示例,用户在进入时未获取任何信息,首页直接强制弹框要求登录注册ETC,这是不符合规范的。 [图片] 建议修改为如下正面示例所示形式:允许在首页说明注册功能后,提供登录或注册按钮供用户主动选择点击登录。 [图片] 4.提供可取消或拒绝登录选项 任何小程序调用帐号登录功能,应当为用户清晰提供可取消或拒绝的选项按钮,不得以任何方式强制用户进行帐号登录。 如下图所示反面示例,到需要登录环节直接跳转登录页面,用户只能选择点击登录或退出小程序,这不符合登录规范要求。 [图片] 建议修改为下图正面示例形式,在需帐号登录的环节,为用户主动点击登录,并提供可取消按钮,不强制登录。 [图片] 针对以上登录规范要求,平台希望开发者们能相应地调整小程序的帐号登录功能。如未满足登录规范要求,从2019年9月1日开始,平台将会在后续的代码审核环节进行规则提示和修改要求反馈。
2019-07-20 - 小程序基础库 2.19.1 更新
各位微信开发者: 小程序基础库 2.19.1 已经开始灰度开发者,请大家基于业务情况关注相关变更。如遇问题请及时在该帖下方留言或在小程序交流专区发表标题包含「基础库2.19.1」的帖子反馈。本次更新如下: 新增 API 支持http-dns能力 详情更新 API chooseAddress 四级地址选择 详情更新 API 插件中使用 TCP 接口时按插件的域名白名单校验 详情修复 组件 小程序跳小程序防止重复弹窗 微信团队 2021年8月5日
2021-08-05 - [Component] slot "" is not found?
开发者工具和真机调试都出现了[Component] slot "" is not found这条警告提示,而且有非常多的警告,会导致开发工具非常卡,不知道这个警告提示可不可以关闭掉? 检查了很多遍组件代码,slot是肯定存在的,property的类型也都没有问题,这个警告提示一直都存在,能不能在开发调试的时候关闭掉这个提示? 最新版开发工具,基础库版本2.19.1 [图片]
2021-08-13 - 周期性拉取和数据预拉取两种方法使用 wx.setBackgroundFetchToken()
查了社区问题,好像对这两种方法使用,很少人提,或者答案不全,或者没有我想要的结果;然后自己给自己加需求使用了这个东西,得到了一下认识,我就把知道的都说下吧: 先上代码: // 设置周期性或者数据拉取参数 if (wx.canIUse("setBackgroundFetchToken")) { // 判断是否支持该api-2.8.0以上可支持,最好使用基础库判断,我这里简单判断 wx.setBackgroundFetchToken({ token: data.id, }) } 获取数据: // 无论是周期性更新还是数据预拉取都是这个方法,只是参数不同 wx.getBackgroundFetchData({ fetchType: 'pre', // fetchTylpe参数为:pre-数据预拉取,periodic-周期性更新 success(res) { console.log(res.fetchedData) // 缓存数据 console.log(res.timeStamp) // 客户端拿到缓存数据的时间戳 console.log(res.path) // 页面路径 console.log(res.query) // query 参数 console.log(res.scene) // 场景值 } }) 上连个拉取数据成功的截图: 周期性更新,获取到的数据:[图片] 数据预拉取,获取到的数据:[图片] 由结果可以感受到返回结构都是一样的,微信发起数据回调都是在属性fetchedData属性里面,需要进行JSON.parse(); 这里需要注意下: 1、进入小程序后台配置好能请求的GET请求接口,这里是GET请求哦要注意啦。[图片] 2、如果工具提示错误代码:6000101,这个很大可能是因为你配置的接口只支持post或者需要登录认证才能调的接口,报的错误; 3、wx.setBackgroundFetchToken({token: 'xxx'}),这里的token属性key无法修改,当微信调你配置的接口,会在配置的地址后面拼接上toke既(https://baidu.com?token="xxx"); 4、周期性数据,你设置了token也不会马上拉取数据的,测试需要借助开发工具点击数据拉取;数据预拉取,设置token下次刷新就有数据了; 5、周期性更新没12小时更新一次,然后缓存数据,但是不能超过256KB; 数据预拉取:token和code只会存在一个,用于标识用户身份。大小应不超过 [代码]256KB[代码]
2020-07-28 - 用户授权提示 "limit_wording":"数量已达上限,无法新增"如何解决?
确实是做了那么久小程序第一次遇见这个问题,提示数量已达上线,无法新增,用户授权的时候提示的,然后获取不到用户的信息 appid是:wx72c47f2484ef6813 [图片]
2021-07-24 - [Component] slot "" is not found?
项目打开突然就报这个警告了是什么情况啊? [Component] slot "" is not found? [图片] [图片]
2021-07-23 - 小程序登录、用户信息相关接口调整说明
公告更新时间:2021年04月15日考虑到近期开发者对小程序登录、用户信息相关接口调整的相关反馈,为优化开发者调整接口的体验,回收wx.getUserInfo接口可获取用户授权的个人信息能力的截止时间由2021年4月13日调整至2021年4月28日24时。为优化用户的使用体验,平台将进行以下调整: 2021年2月23日起,若小程序已在微信开放平台进行绑定,则通过wx.login接口获取的登录凭证可直接换取unionID2021年4月28日24时后发布的小程序新版本,无法通过wx.getUserInfo与<button open-type="getUserInfo"/>获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括userInfo与encryptedData中的用户个人信息),获取加密后的openID与unionID数据的能力不做调整。此前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。新增getUserProfile接口(基础库2.10.4版本开始支持),可获取用户头像、昵称、性别及地区信息,开发者每次通过该接口获取用户个人信息均需用户确认。具体接口文档:《getUserProfile接口文档》由于getUserProfile接口从2.10.4版本基础库开始支持(覆盖微信7.0.9以上版本),考虑到开发者在低版本中有获取用户头像昵称的诉求,对于未支持getUserProfile的情况下,开发者可继续使用getUserInfo能力。开发者可参考getUserProfile接口文档中的示例代码进行适配。请使用了wx.getUserInfo接口或<button open-type="getUserInfo"/>的开发者尽快适配。开发者工具1.05.2103022版本开始支持getUserProfile接口调试,开发者可下载该版本进行改造。 小游戏不受本次调整影响。 一、调整背景很多开发者在打开小程序时就通过组件方式唤起getUserInfo弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。 二、调整说明通过wx.login接口获取的登录凭证可直接换取unionID 若小程序已在微信开放平台进行绑定,原wx.login接口获取的登录凭证若需换取unionID需满足以下条件: 如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用2月23日后,开发者调用wx.login获取的登录凭证可以直接换取unionID,无需满足以上条件。 回收wx.getUserInfo接口可获取用户个人信息能力 4月28日24时后发布的新版本小程序,开发者调用wx.getUserInfo或<button open-type="getUserInfo"/>将不再弹出弹窗,直接返回匿名的用户个人信息,获取加密后的openID、unionID数据的能力不做调整。 具体变化如下表: [图片] 即wx.getUserInfo接口的返回参数不变,但开发者获取的userInfo为匿名信息。 [图片] 此外,针对scope.userInfo将做如下调整: 若开发者调用wx.authorize接口请求scope.userInfo授权,用户侧不会触发授权弹框,直接返回授权成功若开发者调用wx.getSetting接口请求用户的授权状态,会直接读取到scope.userInfo为true新增getUserProfile接口 若开发者需要获取用户的个人信息(头像、昵称、性别与地区),可以通过wx.getUserProfile接口进行获取,该接口从基础库2.10.4版本开始支持,该接口只返回用户个人信息,不包含用户身份标识符。该接口中desc属性(声明获取用户个人信息后的用途)后续会展示在弹窗中,请开发者谨慎填写。开发者每次通过该接口获取用户个人信息均需用户确认,请开发者妥善保管用户快速填写的头像昵称,避免重复弹窗。 插件用户信息功能页 插件申请获取用户头像昵称与用户身份标识符仍保留功能页的形式,不作调整。用户在用户信息功能页中授权之后,插件就可以直接调用 wx.login 和 wx.getUserInfo 。 三、最佳实践调整后,开发者如需获取用户身份标识符只需要调用wx.login接口即可。 开发者若需要在界面中展示用户的头像昵称信息,可以通过<open-data>组件进行渲染,该组件无需用户确认,可以在界面中直接展示。 在部分场景(如社交类小程序)中,开发者需要在获取用户的头像昵称信息,可调用wx.getUserProfile接口,开发者每次通过该接口均需用户确认,请开发者妥善处理调用接口的时机,避免过度弹出弹窗骚扰用户。 微信团队 2021年4月15日
2021-04-15 - canvas 2d 画图成功后,导出图片是空白?
canvas 2d已经画图完成了,[图片]导出图片后,点击本地链接[图片]图片是空白的[图片] 这个代码 /**画布分享链接的海报1 */ canvasImg1: function (template, img, callback) { let that = this; let rpx = that.globalData.rpx; const query = wx.createSelectorQuery() query.select(template) .fields({ node: true, size: true }) .exec((res) => { const canvas = res[0].node const ctx = canvas.getContext('2d') canvas.width = 442 * rpx canvas.height = 365 * rpx const codeImg = canvas.createImage(); codeImg.src = img; codeImg.onload = () => { ctx.drawImage(codeImg, 0, 0, 442 * rpx, 264 * rpx, ); ctx.save(); } const codeImg2 = canvas.createImage(); codeImg2.src = '/images/icon/btn.png'; codeImg2.onload = () => { ctx.drawImage(codeImg2, 14 * rpx, (264 + 8) * rpx, 396 * rpx, 56 * rpx, ); ctx.save(); } setTimeout(function () { wx.canvasToTempFilePath({ canvas, success(res) { callback(res.tempFilePath) } }) }, 300); }) },
2020-05-13 - canvas 2d绘制网络图片,还需要downloadFile吗?
canvas 2d绘制网络图片,还需要downloadFile吗?
2020-08-27 - 为什么图片链接可正常访问但image组件加载不出来图片?
因为 image 控件的图片拉取本质上是 web 上的 backgroundImage,很多时候是由于图片不规范(content-type / length / 是否302跳转等 )导致拉取不成功,最终表现为加载不出图片。关于这一块我们在持续优化中
2021-12-17 - 小程序富文本能力的深入研究与应用
前言 在开发小程序的过程中,很多时候会需要使用富文本内容,然而现有的方案都有着或多或少的缺陷,如何更好的显示富文本将是一个值得继续探索的问题。 [图片] 现有方案 WxParse [代码]WxParse[代码] 作为一个应用最为应用最广泛的富文本插件,在很多时候是大家的首选,但其也明显的存在许多问题。 格式不正确时标签会被原样显示 很多人可能都见到过这种情况,当标签里的内容出现格式上的错误(如冒号不匹配等),在[代码]WxParse[代码]中都会被认为是文本内容而原样输出,例如:[代码]<span style="font-family:"宋体"">Hello World!</span> [代码] 这是由于[代码]WxParse[代码]的解析脚本中,是通过正则匹配的方式进行解析,一旦格式不正确,就将导致无法匹配而被直接认为是文本[代码]//WxParse的匹配模式 var startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/, endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/, attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g; [代码] 然而,[代码]html[代码] 对于格式的要求并不严格,一些诸如冒号不匹配之类的问题是可以被浏览器接受的,因此需要在解析脚本的层面上提高容错性。 超过限定层数时无法显示 这也是一个让许多人十分苦恼的问题,[代码]WxParse[代码] 通过 [代码]template[代码] 迭代的方式进行显示,当节点的层数大于设定的 [代码]template[代码] 数时就会无法显示,自行增加过多的层数又会大大增加空间大小,因此对于 [代码]wxml[代码] 的渲染方式也需要改进。 对于表格、列表等复杂内容支持性差 [代码]WxParse[代码] 对于 [代码]table[代码]、[代码]ol[代码]、[代码]ul[代码] 等支持性较差,类似于表格单元格合并,有序列表,多层列表等都无法渲染 rich-text [代码]rich-text[代码] 组件作为官方的富文本组件,也是很多人选择的方案,但也存在着一些不足之处 一些常用标签不支持 [代码]rich-text[代码] 支持的标签较少,一些常用的标签(比如 [代码]section[代码])等都不支持,导致其很难直接用于显示富文本内容 ps:最新的 2.7.1 基础库已经增加支持了许多语义化标签,但还是要考虑低版本兼容问题 不能实现图片和链接的点击 [代码]rich-text[代码] 组件中会屏蔽所有结点事件,这导致无法实现图片点击预览,链接点击效果等操作,较影响体验 不支持音视频 音频和视频作为富文本的重要内容,在 [代码]rich-text[代码] 中却不被支持,这也严重影响了使用体验 共同问题 不支持解析 [代码]style[代码] 标签 现有的方案中都不支持对 [代码]style[代码] 标签中的内容进行解析和匹配,这将导致一些标签样式的不正确 [图片] 方案构建 因此要解决上述问题,就得构建一个新的方案来实现 渲染方式 对于该节点下没有图片、视频、链接等的,直接使用 [代码]rich-text[代码] 显示(可以减少标签数,提高渲染效果),否则则继续进行深入迭代,例如: [图片] 对于迭代的方式,有以下两种方案: 方案一 像 [代码]WxParse[代码] 那样通过 [代码]template[代码] 进行迭代,对于小于 20 层的内容,通过 [代码]template[代码] 迭代的方式进行显示,超过 20 层时,用 [代码]rich-text[代码] 组件兜底,避免无法显示,这也是一开始采用的方案[代码]<!--超过20层直接使用rich-text--> <template name='rich-text-floor20'> <block wx:for='{{nodes}}' wx:key> <rich-text nodes="{{item}}" /> </block> </template> [代码] 方案二 添加一个辅助组件 [代码]trees[代码],通过组件递归的方式显示,该方式实现了没有层数的限制,且避免了多个重复性的 [代码]template[代码] 占用空间,也是最终采取的方案[代码]<!--继续递归--> <trees wx:else id="node" class="{{item.name}}" style="{{item.attrs.style}}" nodes="{{item.children}}" controls="{{controls}}" /> [代码] 解析脚本 从 [代码]htmlparser2[代码] 包进行改写,其通过状态机的方式取代了正则匹配,有效的解决了容错性问题,且大大提升了解析效率 [代码]//不同状态各通过一个函数进行判断和状态跳转 for (; this._index < this._buffer.length; this._index++) this[this._state](this._buffer[this._index]); [代码] 兼容 [代码]rich-text[代码] 为了解析结果能同时在 [代码]rich-text[代码] 组件上显示,需要对一些 [代码]rich-text[代码]不支持的组件进行转换[代码]//以u标签为例 case 'u': name = 'span'; attrs.style = 'text-decoration:underline;' + attrs.style; break; [代码] 适配渲染需要 在渲染过程中,需要对节点下含有图片、视频、链接等不能由 [代码]rich-text[代码]直接显示的节点继续迭代,否则直接使用 [代码]rich-text[代码] 组件显示;因此需要在解析过程中进行标记,遇到 [代码]img[代码]、[代码]video[代码]、[代码]a[代码] 等标签时,对其所有上级节点设置一个 [代码]continue[代码] 属性用于区分[代码]case 'a': attrs.style = 'color:#366092;display:inline;word-break:break-all;overflow:auto;' + attrs.style; element.continue = true; //冒泡:对上级节点设置continue属性 this._bubbling(); break; [代码] 处理style标签 解析方式 方案一 正则匹配[代码]var classes = style.match(/[^\{\}]+?\{([^\{\}]*?({[\s\S]*?})*)*?\}/g); [代码] 缺陷: 当 [代码]style[代码] 字符串较长时,可能出现栈溢出的问题 对于一些复杂的情况,可能出现匹配失败的问题 方案二 状态机的方式,类似于 [代码]html[代码] 字符串的处理方式,对于 [代码]css[代码] 的规则进行了调整和适配,也是目前采取的方案 匹配方式 方案一 将 [代码]style[代码] 标签解析为一个形如 [代码]{key:content}[代码] 的结构体,对于每个标签,通过访问结构体的相应属性即可知晓是否匹配成功[代码]if (this._style[name]) attrs.style += (';' + this._style[name]); if (this._style['.' + attrs.class]) attrs.style += (';' + this._style['.' + attrs.class]); if (this._style['#' + attrs.id]) attrs.style += (';' + this._style['#' + attrs.id]); [代码] 优点:匹配效率高,适合前端对于时间和空间的要求 缺点:对于多层选择器等复杂情况无法处理 因此在前端组件包中采取的是这种方式进行匹配 方案二 将 [代码]style[代码] 标签解析为一个数组,每个元素是形如 [代码]{key,list,content,index}[代码] 的结构体,主要用于多层选择器的匹配,内置了一个数组 [代码]list[代码] 存储各个层级的选择器,[代码]index[代码] 用于记录当前的层数,匹配成功时,[代码]index++[代码],匹配成功的标签出栈时,[代码]index--[代码];通过这样的方式可以匹配多层选择器等更加复杂的情况,但匹配过程比起方案一要复杂的多。 [图片] 遇到的问题 [代码]rich-text[代码] 组件整体的显示问题 在显示过程中,需要把 [代码]rich-text[代码] 作为整体的一部分,在一些情况下会出现问题,例如: [代码]Hello <rich-text nodes="<div style='display:inline-block'>World!</div>"/> [代码] 在这种情况下,虽然对 [代码]rich-text[代码] 中的顶层 [代码]div[代码] 设置了 [代码]display:inline-block[代码],但没有对 [代码]rich-text[代码] 本身进行设置的情况下,无法实现行内元素的效果,类似的还有 [代码]float[代码]、[代码]width[代码](设置为百分比时)等情况 解决方案 方案一 用一个 [代码]view[代码] 包裹在 [代码]rich-text[代码] 外面,替代最外层的标签[代码]<view style="{{item.attrs.style}}"> <rich-text nodes="{{item.children}}" /> </view> [代码] 缺陷:当该标签为 [代码]table[代码]、[代码]ol[代码] 等功能性标签时,会导致错误 方案二 对 [代码]rich-text[代码] 组件使用最外层标签的样式[代码]<rich-text nodes="{{item}}" style="{{item.attrs.style}}" /> [代码] 缺陷:当该标签的 [代码]style[代码] 中含有 [代码]margin[代码]、[代码]padding[代码] 等内容时会被缩进两次 方案三 通过 [代码]wxs[代码] 脚本将顶层标签的 [代码]display[代码]、[代码]float[代码]、[代码]width[代码] 等样式提取出来放在 [代码]rich-text[代码] 组件的 [代码]style[代码] 中,最终解决了这个问题[代码]var res = ""; var reg = getRegExp("float\s*:\s*[^;]*", "i"); if (reg.test(style)) res += reg.exec(style)[0]; reg = getRegExp("display\s*:\s*([^;]*)", "i"); if (reg.test(style)) { var info = reg.exec(style); res += (';' + info[0]); display = info[1]; } else res += (';display:' + display); reg = getRegExp("[^;\s]*width\s*:\s*[^;]*", "ig"); var width = reg.exec(style); while (width) { res += (';' + width[0]); width = reg.exec(style); } return res; [代码] 图片显示的问题 在 [代码]html[代码] 中,若 [代码]img[代码] 标签没有设置宽高,则会按照原大小显示;设置了宽或高,则按比例进行缩放;同时设置了宽高,则按设置的宽高进行显示;在小程序中,若通过 [代码]image[代码] 组件模拟,需要通过 [代码]bindload[代码] 来获取图片宽高,再进行 [代码]setData[代码],当图片数量较大时,会大大降低性能;另外,许多图片的宽度会超出屏幕宽度,需要加以限制 解决方案 用 [代码]rich-text[代码] 中的 [代码]img[代码] 替代 [代码]image[代码] 组件,实现更加贴近 [代码]html[代码] 的方式 ;对 [代码]img[代码] 组件设置默认的效果 [代码]max-width:100%;[代码] 视频显示的问题 当一个页面出现过多的视频时,同时进行加载可能导致页面卡死 解决方案 在解析过程中进行计数,若视频数量超过3个,则用一个 [代码]wxss[代码] 绘制的图片替代 [代码]video[代码] 组件,当受到点击时,再切换到 [代码]video[代码] 组件并设置 [代码]autoplay[代码] 以模拟正常效果,实现了一个类似懒加载的功能 [代码]<!--视频--> <view wx:if="{{item.attrs.id>'media3'&&!controls[item.attrs.id].play}}" class="video" data-id="{{item.attrs.id}}" bindtap="_loadVideo"> <view class="triangle_border_right"></view> </view> <video wx:else src='{{controls[item.attrs.id]?item.attrs.source[controls[item.attrs.id].index]:item.attrs.src}}' id="{{item.attrs.id}}" autoplay="{{item.attrs.autoplay||controls[item.attrs.id].play}}" /> [代码] 文本复制的问题 小程序中只有 [代码]text[代码] 组件可以通过设置 [代码]selectable[代码] 属性来实现长按复制,在富文本组件中实现这一功能就存在困难 解决方案 在顶层标签上加上 [代码]user-select:text;-webkit-user-select[代码] [图片] 实现更加丰富的功能 在此基础上,还可以实现更多有用的功能 自动设置页面标题 在浏览器中,会将 [代码]title[代码] 标签中的内容设置到页面标题上,在小程序中也同样可以实现这样的功能[代码]if (res.title) { wx.setNavigationBarTitle({ title: res.title }) } [代码] 多资源加载 由于平台差异,一些媒体文件在不同平台可能兼容性有差异,在浏览器中,可以通过 [代码]source[代码] 标签设置多个源,当一个源加载失败时,用下一个源进行加载和播放,在本插件中同样可以实现这样的功能[代码]errorEvent(e) { //尝试加载其他源 if (!this.data.controls[e.currentTarget.dataset.id] && e.currentTarget.dataset.source.length > 1) { this.data.controls[e.currentTarget.dataset.id] = { play: false, index: 1 } } else if (this.data.controls[e.currentTarget.dataset.id] && e.currentTarget.dataset.source.length > (this.data.controls[e.currentTarget.dataset.id].index + 1)) { this.data.controls[e.currentTarget.dataset.id].index++; } this.setData({ controls: this.data.controls }) this.triggerEvent('error', { target: e.currentTarget, message: e.detail.errMsg }, { bubbles: true, composed: true }); }, [代码] 添加加载提示 可以在组件的插槽中放入加载提示信息或动画,在加载完成后会将 [代码]slot[代码] 的内容渐隐,将富文本内容渐显,提高用户体验,避免在加载过程中一片空白。 最终效果 经过一个多月的改进,目前实现了这个功能丰富,无层数限制,渲染效果好,轻量化(30.0KB),效率高,前后端通用的富文本插件,体验小程序的用户数已经突破1k啦,欢迎使用和体验 [图片] github 地址 npm 地址 总结 以上就是我在开发这样一个富文本插件的过程大致介绍,希望对大家有所帮助;本人在校学生,水平所限,不足之处欢迎提意见啦! [图片]
2020-12-27 - 接口canvas参数类型不对
https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html canvas 开启2d后,接口wx.canvasToTempFilePath(Object object, Object this)中的canvas参数传入的canvas实例后,canvas参数类型应该是一个object类型,文档中canvas参数的类型是string,这个地方有问题吧 然后这样调用之后,开发工具中可以正常显示合成后输出的图片,但是在真机ios中输出的图片不显示,显示为空白的图片区域
2020-02-09 - 控制台报11 listeners of event AppRoute错误,啥情?
控制台报 VM745:1 [Event] 11 listeners of event AppRoute have been added, possibly causing memory leak. [图片] 一进小程序就有这个警告,不知道为什么, 也看了其他人相关的提问,有说更新开发者工具版本的,但是更新之后也还是有警告 我也没用视频组件以及广告插件 官方大大快来帮我解决下,谢谢啦
2019-08-09 - wx.request接口产生大量未知型错误,请官方同学看下是什么情况,要怎么解决
- 当前 Bug 的表现(可附上截图) 我公司的小程序有进行错误监控,但是里面大量接口错误均是非业务类型的报错,而是一堆未知的英文报错信息,请官方同学帮忙看下这是什么情况,网上也查不到类型问题的解决方案; 下面是错误信息列举: request:fail interrupted request:fail request unknow host error request:fail 请求超时。 request:fail Read error: ssl=0x8418c0c0: Failure in SSL library, usually a protocol error error:100000d7:SSL routines:OPENSSL_internal:SSL_HANDSHAKE_FAILURE (external/boringssl/src/ssl/ssl_lib.c:710 0xd86a0144:0x00000000) request:fail 未能找到使用指定主机名的服务器。 request:fail 未能完成该操作。软件导致连接中止 request:fail Unable to resolve host "域名": No address associated with hostname request:fail The request timed out. request:fail unexpected end of stream on Connection{域名:443, proxy=DIRECT@ hostAddress=IP地址 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 protocol=http/1.1} (recycle count=0) request:fail ssl hand shake error request:fail 此服务器的证书无效。您可能正在连接到一个伪装成“域名”的服务器,这会威胁到您的机密信息的安全。 request:fail request connect error
2019-05-21