<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>WXOPEN Club | 微信小程序专业社区</title>
    <link>https://wxopen.club</link>
    <language>zh-cn</language>
    <description>WXOPEN Club 社区为国内最专业的微信小程序技术社区，致力于微信小程序的技术研究。</description>
    
    <item>
      <title><![CDATA[wx-open-launch-weapp 打开APP 1.部分安卓点击“打开APP”无反应？]]></title>
      <link>https://wxopen.club/topic/647bf1fbc7adf41c3b1c8bd2</link>
      <guid>https://wxopen.club/topic/647bf1fbc7adf41c3b1c8bd2</guid>
      <description><![CDATA[<div class="markdown-text"><p>wx-open-launch-weapp 打开APP 1.部分安卓点击“打开APP”无反应，IOS用户无此现象 2 控制台显示出已获取跳转路径的地址</p>
</div>]]></description>
      <author>ayin</author>
      <pubDate>Sun, 04 Jun 2023 00:41:35 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[【笔记】推荐微信小程序UI组件]]></title>
      <link>https://wxopen.club/topic/647b4bd74cdb06243e5a86b5</link>
      <guid>https://wxopen.club/topic/647b4bd74cdb06243e5a86b5</guid>
      <description><![CDATA[<div class="markdown-text"><p>​WeUI 使用简单，风格微信原生风格，以绿色为主色 ，主要是两个大版本 ，1.x版本和2.x版本 ，相比1.x版本来说，2.x版本视觉上更好。</p>
<p><a href="https://mp.weixin.qq.com/s/tKoUve0WYokDNgBtNTqyxg" rel="noopener noreferrer" target="_blank">全文链接：https://mp.weixin.qq.com/s/tKoUve0WYokDNgBtNTqyxg</a></p>
<p>​</p>
</div>]]></description>
      <author>lzheng</author>
      <pubDate>Sat, 03 Jun 2023 20:26:23 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[视频号小店订单一直不结算怎么办？]]></title>
      <link>https://wxopen.club/topic/647b4a394cdb06243e5a858f</link>
      <guid>https://wxopen.club/topic/647b4a394cdb06243e5a858f</guid>
      <description><![CDATA[<div class="markdown-text"><p>视频号小店：<span style="color: rgb(0, 0, 0); font-size: 14px;">宇豪同学989</span></p>
<p><span style="color: rgb(0, 0, 0); font-size: 14px;">2023年4月11日的订单。人家申请退货退款了。然后又撤销了。到现在为止。一直处于是未结算中。</span></p>
<p><span style="color: rgb(0, 0, 0); font-size: 14px;">2023年3月18日的订单。人家申请退货退款，然后原因申请错了。我给他拒绝了。客服介入中，一直到现在为止还是介入中，不结算也不退款。订单。</span></p>
<p><span style="color: rgb(0, 0, 0); font-size: 14px;">现在我要退店。导致是显示订单未完结那里完成不了。怎么处理？</span></p>
</div>]]></description>
      <author>xiuyinglei</author>
      <pubDate>Sat, 03 Jun 2023 17:24:58 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[视频号小店【优惠券】功能调整]]></title>
      <link>https://wxopen.club/topic/647b4a024cdb06243e5a8560</link>
      <guid>https://wxopen.club/topic/647b4a024cdb06243e5a8560</guid>
      <description><![CDATA[<div class="markdown-text"><p>【‼️必看 重要调整】</p>
<p>《视频号小店【优惠券】功能调整公告》</p>
<p><a href="https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/niXmJEzGQpz5nQGN" rel="noopener noreferrer" target="_blank">https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/niXmJEzGQpz5nQGN</a></p>
<p>视频号小店官网，认准.qq结尾，避免上当受骗！</p>
<p><a href="https://channels.weixin.qq.com/commerce/#/" rel="noopener noreferrer" target="_blank">https://channels.weixin.qq.com/commerce/#/</a></p>
<p>【服饰内衣、母婴、鞋靴、箱包皮具】商家行业规范细则解读（商家版）</p>
<p><a href="https://doc.weixin.qq.com/doc/w3_AS4A-gb4AEkGSB5hRMKQse1A3MXwm?scode=AJEAIQdfAAoc08yHAvAP0AVQa_ACc" rel="noopener noreferrer" target="_blank">https://doc.weixin.qq.com/doc/w3_AS4A-gb4AEkGSB5hRMKQse1A3MXwm?scode=AJEAIQdfAAoc08yHAvAP0AVQa_ACc</a></p>
<p>欢迎大家发布短视频带上话题：#618视频号直播好物节  #视频号服饰上新季 #买新品上视频号【‼️必看 重要调整】</p>
<p>《视频号小店【优惠券】功能调整公告》</p>
<p><a href="https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/niXmJEzGQpz5nQGN" rel="noopener noreferrer" target="_blank">https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/niXmJEzGQpz5nQGN</a></p>
<p>视频号小店官网，认准.qq结尾，避免上当受骗！</p>
<p><a href="https://channels.weixin.qq.com/commerce/#/" rel="noopener noreferrer" target="_blank">https://channels.weixin.qq.com/commerce/#/</a></p>
<p>【服饰内衣、母婴、鞋靴、箱包皮具】商家行业规范细则解读（商家版）</p>
<p><a href="https://doc.weixin.qq.com/doc/w3_AS4A-gb4AEkGSB5hRMKQse1A3MXwm?scode=AJEAIQdfAAoc08yHAvAP0AVQa_ACc" rel="noopener noreferrer" target="_blank">https://doc.weixin.qq.com/doc/w3_AS4A-gb4AEkGSB5hRMKQse1A3MXwm?scode=AJEAIQdfAAoc08yHAvAP0AVQa_ACc</a></p>
<p>欢迎大家发布短视频带上话题：#618视频号直播好物节  #视频号服饰上新季 #买新品上视频号</p>
</div>]]></description>
      <author>jing45</author>
      <pubDate>Sat, 03 Jun 2023 16:38:04 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[视频号小店虚拟号内测]]></title>
      <link>https://wxopen.club/topic/647b49b94cdb06243e5a851c</link>
      <guid>https://wxopen.club/topic/647b49b94cdb06243e5a851c</guid>
      <description><![CDATA[<div class="markdown-text"><p>为保护用户个人隐私，平台默认为用户提供虚拟号服务，买家支付成功后的订单，商家后台默认是看不到买家的真实手机号码。平台自动生成了11位虚拟号+4位转接号。</p>
<p><img src="https://image.wxopen.club/content_546e8d28-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>点击订单详情，商家每个月可以查看100个用户的真实手机号码，应该是为了纠纷率，方便商家联系用户使用</p>
<p><img src="https://image.wxopen.club/content_547a6bca-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>虚拟号的优点是保护了用户隐私，缺点是<strong style="color: rgb(250, 81, 81);">用户收不到取件码短信</strong>。</p>
</div>]]></description>
      <author>xiulanguo</author>
      <pubDate>Sat, 03 Jun 2023 16:14:44 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[在微信搜一搜里，相关搜索中出现诋毁公司品牌的词，如何处理？]]></title>
      <link>https://wxopen.club/topic/647b4aaa4cdb06243e5a85e2</link>
      <guid>https://wxopen.club/topic/647b4aaa4cdb06243e5a85e2</guid>
      <description><![CDATA[<div class="markdown-text"><p style="font-size: 16px;">尊敬的微信团队成员：</p>
<p style="font-size: 16px;">你们好！</p>
<p style="font-size: 16px;">在微信搜一搜 搜索“喜来健温热理疗床多少钱”时，在下拉词中存在一些的不实信息，请求投诉解决，在此对微信团队工作人员花费的时间及精力表示衷心的感谢，祝你们工作顺利！</p>
<h2>公司名称是：喜来健医疗器械(北京)有限公司</h2>
<p style="font-size: 16px;">在微信搜一搜当中搜索“喜来健温热理疗床多少钱”，相关词中包含“喜来健骗局央视”、“央视曝光喜来健理疗床”等，更多请看下方截图。据本人亲身对喜来健料理床使用，此产品效果甚好，价格亲民，非常喜欢这个东西。该信息不实信息，望微信团队能够给予处理，感谢！</p>
<p style="font-size: 16px;"><img src="https://image.wxopen.club/content_e3c2244e-0218-11ee-843e-acde48001122.png"/></p>
<p style="font-size: 16px;"><img src="https://image.wxopen.club/content_e3cbede4-0218-11ee-843e-acde48001122.png"/></p>
<p style="font-size: 16px;"><img src="https://image.wxopen.club/content_e3d51900-0218-11ee-843e-acde48001122.png"/></p>
<p style="font-size: 16px;"><img src="https://image.wxopen.club/content_e3dee872-0218-11ee-843e-acde48001122.png"/></p>
<p style="font-size: 16px;"><img src="https://image.wxopen.club/content_e3e76600-0218-11ee-843e-acde48001122.png"/></p>
<p style="font-size: 16px;"><img src="https://image.wxopen.club/content_e3f12e2e-0218-11ee-843e-acde48001122.png"/></p>
</div>]]></description>
      <author>fangguiying</author>
      <pubDate>Sat, 03 Jun 2023 11:52:45 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[小程序开发记录，自定义tabbar+uni-popup]]></title>
      <link>https://wxopen.club/topic/647b4bb34cdb06243e5a8695</link>
      <guid>https://wxopen.club/topic/647b4bb34cdb06243e5a8695</guid>
      <description><![CDATA[<div class="markdown-text"><p>小程序开发记录，自定义tabbar+uni-popup</p>
<p>最近开发小程序首次使用了uni-app，由于要根据用户权限展示不同的底部tabbar，所以不能使用原生的tab栏，</p>
<p>在项目开发过程中有个从底部滑出的弹窗，使用了uni-app的uni-popup，大家都知道弹窗弹出的时候，会带有遮罩层，也就是除了弹窗以外整个界面是暗黑色的，除了弹窗本身。</p>
<p>但是底部的tabbar也是自定义的，就导致</p>
<p><img src="https://image.wxopen.club/content_8217c004-0219-11ee-843e-acde48001122.png" alt=""></p>
<p>如上图所示，除了弹窗所在的界面外其他都是遮罩层，但是底部tabbar其实是不应该被遮罩的，这时候就用了原生的组件来替换，具体是</p>
<p><img src="https://image.wxopen.club/content_82334518-0219-11ee-843e-acde48001122.png" alt=""></p>
<p>~</p>
</div>]]></description>
      <author>yujun</author>
      <pubDate>Sat, 03 Jun 2023 11:02:15 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[在我们处于小程序服务的某种场景中时,就可以通过一些设备实现与承载服务的载体之间的对接,从而使用小程序。目前最为普遍的应用]]></title>
      <link>https://wxopen.club/topic/647b4b0e4cdb06243e5a860a</link>
      <guid>https://wxopen.club/topic/647b4b0e4cdb06243e5a860a</guid>
      <description><![CDATA[<div class="markdown-text"><p><a href="https://developers.weixin.qq.com/community/business/course/000c2053618c189d0b2f2b8f95b40dhttps://developers.weixin.qq.com/community/business/course/000c2053618c189d0b2f2b8f95b40d" rel="noopener noreferrer" target="_blank">https://developers.weixin.qq.com/community/business/course/000c2053618c189d0b2f2b8f95b40dhttps://developers.weixin.qq.com/community/business/course/000c2053618c189d0b2f2b8f95b40d</a></p>
</div>]]></description>
      <author>pengqiang</author>
      <pubDate>Sat, 03 Jun 2023 10:29:28 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[公众号被限流了，没有收到违规通知，怎么办]]></title>
      <link>https://wxopen.club/topic/647b499b4cdb06243e5a8500</link>
      <guid>https://wxopen.club/topic/647b499b4cdb06243e5a8500</guid>
      <description><![CDATA[<div class="markdown-text"><p>公众号原始ID：gh_b492020a3c9d</p>
<p>公众号名称：大语文作文课堂</p>
<p>问题描述：我的公众号从2022年11月1号，不知道什么原因被限流了，也没收到违规通知 ，公众号的任何一篇文章搜一搜都搜索不到。恳请技术人员出面帮忙解决一下 ，万分感谢！</p>
<p>搜不到的文章链接：<a href="https://mp.weixin.qq.com/s/sqNUYX-DRMGh2x7L4OoSvw" rel="noopener noreferrer" target="_blank">https://mp.weixin.qq.com/s/sqNUYX-DRMGh2x7L4OoSvw</a>   文章标题：瞌睡虫王国作文300字三年级下册</p>
<p><img src="https://image.wxopen.club/content_42b65d72-0218-11ee-843e-acde48001122.jpg" alt=""></p>
</div>]]></description>
      <author>jing14</author>
      <pubDate>Sat, 03 Jun 2023 06:37:20 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[关于小程序内通过webview audio标签播放音频的现象总结]]></title>
      <link>https://wxopen.club/topic/647b4a274cdb06243e5a857e</link>
      <guid>https://wxopen.club/topic/647b4a274cdb06243e5a857e</guid>
      <description><![CDATA[<div class="markdown-text"><p>关于小程序内通过webview audio标签播放音频的现象总结</p>
<p>~</p>
<p>这几天在开发基于冥想的小程序，里面有些音频播放的场景，目前由于我们音频的稀有性，只能通过特别的逻辑，使用webview的audio标签来展示，而没有通过小程序原生的音频播放实现方式。</p>
<p>那么通过webview audio标签播放音频有什么问题呢？</p>
<p>大家也不妨体验下</p>
<img src="https://image.wxopen.club/content_95ae4dfa-0218-11ee-843e-acde48001122.jpg" width="510px"/>
<img src="https://image.wxopen.club/content_95bdf160-0218-11ee-843e-acde48001122.png" style="height: auto;"/>
<p>刚开始进入的界面展示</p>
<p><img src="https://image.wxopen.club/content_95c5fae0-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>播放过程展示，增加了快进的操作</p>
<p><img src="https://image.wxopen.club/content_95cb4658-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>结论</p>
<p>webview audio标签播放音频在手机息屏时，音频会暂停播放，安卓和苹果手机均亲测，结论是一样的，我使用的手机是</p>
<p>安卓：华为P60</p>
<p>苹果：苹果13</p>
<p>备注</p>
<p>手机息屏会导致小程序切到后台，其实更准确来讲，是小程序切到后台后，webview audio标签播放会暂停</p>
</div>]]></description>
      <author>yong48</author>
      <pubDate>Sat, 03 Jun 2023 02:01:29 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[试着往公众号里接入开放API]]></title>
      <link>https://wxopen.club/topic/647b4bba4cdb06243e5a869c</link>
      <guid>https://wxopen.club/topic/647b4bba4cdb06243e5a869c</guid>
      <description><![CDATA[<div class="markdown-text"><p style="font-size: 16px; margin-bottom: 24px;">最新更细：使用公众号绑定后，API回调接口是接不到消息的，小程序是可以的。</p>
<p style="font-size: 16px; margin-bottom: 24px;">服务端想接收公众号的消息的话，只能使用高级技能，但是高级技能只能往服务端传在词典里有的固定值，</p>
<p style="font-size: 16px; margin-bottom: 24px;">注意，这里说的是固定值，也就是说只能往后端传在词典里预设好的值，无法传一些例如某个手机号等。</p>
<p style="font-size: 16px; margin-bottom: 24px;">目前高级技能不能满足我这边的需求，有大佬用对话平台实现了公众号的消息无损推送到api端吗？求教</p>
<p style="font-size: 16px; margin-bottom: 24px;">============================================================================</p>
<p>说下接入时的几个误区，大家可以看下绕过几个坑。</p>
<p>首先就是配置了API是无效的，现在配置API无用，公众号接收到消息根本不会往API设置的回调地址发。</p>
<p>然后我注意到高级技能，在高级技能里面的回复类型有一个服务接口调用，但是这个调用需要触发高级技能设置的问法。。。</p>
<p>即使设置了问法也没触发成功过，调用服务端我只在接口调试里面触发成功过，接收到的值也跟文档里面完全不一致。</p>
<p>现在的需求是接收公众号的所有消息然后通过api回调接口处理后返回对应的回答，请问能做吗？</p>
</div>]]></description>
      <author>xiulanguo</author>
      <pubDate>Fri, 02 Jun 2023 20:56:36 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[申请公众号长期订阅模板]]></title>
      <link>https://wxopen.club/topic/647b4aa94cdb06243e5a85e1</link>
      <guid>https://wxopen.club/topic/647b4aa94cdb06243e5a85e1</guid>
      <description><![CDATA[<div class="markdown-text"><p>【公众号appid】<span style="font-size: 14px; color: rgb(53, 53, 53);">wxe00330c01b1ae789</span></p>
<p><span style="font-size: 14px; color: rgb(53, 53, 53);">【公众号主体】江西恒源能源服务有限公司</span></p>
<p><span style="font-size: 14px; color: rgb(53, 53, 53);">【申请模板类目】工具—&gt;设备管理</span></p>
<p><span style="font-size: 14px; color: rgb(53, 53, 53);">【使用场景】帮助用户管理设备，如果设备出现故障或者将巡检结果通知给客户</span></p>
<p><span style="font-size: 14px; color: rgb(53, 53, 53);">【模板字段】</span></p>
<p style="font-size: 14px;">巡检单号	{{character_string1.DATA}}</p>
<p style="font-size: 14px;"><span style="color: rgb(53, 53, 53); font-size: 14px;">设备名称	{{thing</span>2<span style="color: rgb(53, 53, 53); font-size: 14px;">.DATA}}</span></p>
<p style="font-size: 14px;"><span style="color: rgb(53, 53, 53); font-size: 14px;">工单状态	{{phrase4.DATA}}</span></p>
<p style="font-size: 14px;">完成时间	{{time4.DATA}}</p>
<p><span style="font-size: 14px; color: rgb(53, 53, 53);">【消息实例】</span></p>
<p><span style="font-size: 14px; color: rgb(53, 53, 53);">标题：《设备安全巡检验收通知》</span></p>
<p>巡检单号：xxxxxxxx</p>
<p>设备名称：xx变压器</p>
<p>巡检结果：暂无异常</p>
<p>巡检时间：2023年4月10日</p>
</div>]]></description>
      <author>ghe</author>
      <pubDate>Fri, 02 Jun 2023 20:31:28 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[法定代表人验证不通过，企业法定代表人身份证号码不一致]]></title>
      <link>https://wxopen.club/topic/647b49f64cdb06243e5a8554</link>
      <guid>https://wxopen.club/topic/647b49f64cdb06243e5a8554</guid>
      <description><![CDATA[<div class="markdown-text"><p>你好，工商数据返回：“企业法定代表人身份证号码不一致”。法定代表人验证失败。请刷新重试</p>
<p>个体工商户名称：杭州余杭白九一梦信息技术服务部</p>
<p>统一社会信用代码：92330110MA8GELAG46</p>
<p>在国家企业信用信息公示系统已经可以查到企业信息，但是还是认证不通过？</p>
</div>]]></description>
      <author>zhujuan</author>
      <pubDate>Fri, 02 Jun 2023 15:29:07 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[局域网通信]]></title>
      <link>https://wxopen.club/topic/647b4bc94cdb06243e5a86a9</link>
      <guid>https://wxopen.club/topic/647b4bc94cdb06243e5a86a9</guid>
      <description><![CDATA[<div class="markdown-text"><p><strong style="font-size: 16px;">返回600002的错误码</strong></p>
<p><img src="https://image.wxopen.club/content_8ee72a72-0219-11ee-843e-acde48001122.png" alt=""><strong style="font-size: 16px;"><span class="ql-cursor">﻿</span></strong></p>
<p><strong style="color: rgb(51, 51, 51); letter-spacing: 0.2px; font-size: 16px;">当且仅当 IP 与手机 IP 处在同一网段且不与本机 IP 相同（一般来说，就是同一局域网，如连接在同一个 wifi 下）时，请求/连接才会成功</strong></p>
<p><strong style="color: rgb(250, 81, 81); font-size: 20px;">备注：同一网段，指的是 </strong><code style="color: rgb(250, 81, 81); font-size: 20px;"><strong>IP</strong></code><strong style="color: rgb(250, 81, 81); font-size: 20px;"> 前三段相同且子网掩码也相同</strong><span style="color: rgb(77, 77, 77); font-size: 16px;">，比如 </span><code style="color: rgb(199, 37, 78); font-size: 14px;">192.168.43.01</code><span style="color: rgb(77, 77, 77); font-size: 16px;"> 和 </span><code style="color: rgb(199, 37, 78); font-size: 14px;">192.168.43.02， 主要的坑大部分会在这。</code></p>
</div>]]></description>
      <author>xia46</author>
      <pubDate>Fri, 02 Jun 2023 14:27:03 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[关于处理小程序弹窗滚动穿透的心得]]></title>
      <link>https://wxopen.club/topic/647b4b594cdb06243e5a8654</link>
      <guid>https://wxopen.club/topic/647b4b594cdb06243e5a8654</guid>
      <description><![CDATA[<div class="markdown-text"><p>在开发小程序时，经常会使用到弹窗（遮罩层+弹窗内容），这时滑动弹窗页面，底层的页面会发生滚动。</p>
<p>个人处理方法（微信开发工具不报错）：</p>
<p>逻辑：</p>
<p>1、在遮罩层最外层元素标签中绑定touchmove事件：@touchmove=“xxxx”； 和 catchtouchmove 属性（<span style="font-size: 16px;">catchtouchmove是捕获touchmove事件的</span>）</p>
<p>2、在methods里定义该方法，方法返回true ：return true</p>
<p>代码：</p>
<p>&lt;template&gt;</p>
<pre class="prettyprint"><code>&amp;lt;view catchtouchmove [@touchmove](/user/touchmove)="mask"&amp;gt;

	遮罩层内容

&amp;lt;/view&amp;gt;
</code></pre><p><span style="font-size: 16px;">&lt;/template&gt;</span></p>
<p>&lt;script&gt;</p>
<pre class="prettyprint"><code>data()&amp;nbsp;{

}，

methods:{
</code></pre><p><span style="font-size: 16px;">mask（）{</span></p>
<pre class="prettyprint"><code>		return true
</code></pre><p><span style="font-size: 16px;">}，</span></p>
<pre class="prettyprint"><code>}
</code></pre><p>&lt;/script&gt;</p>
</div>]]></description>
      <author>yang55</author>
      <pubDate>Fri, 02 Jun 2023 13:42:31 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[应该增加类目 有点单一 没有选择合适的类目]]></title>
      <link>https://wxopen.club/topic/647b4b1d4cdb06243e5a8619</link>
      <guid>https://wxopen.club/topic/647b4b1d4cdb06243e5a8619</guid>
      <description><![CDATA[<div class="markdown-text"><p style="text-indent: 2em;">望回复？类目的选择太小了，没有合适的选择 发不 选择其他的类目又不合适？........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................		<span style="font-size: 16px;">................................................................................................................................................................................................................................................................................................................................................................................................................................................................</span> <span style="font-size: 16px;">................................................................................................................................................................................................................................................................</span> <span style="font-size: 16px;">................................................................................................................................................................................................</span> <span style="font-size: 16px;">................................................................................................................................................................................................</span> <span style="font-size: 16px;">................................................................................................................................................................................................</span> <span style="font-size: 16px;">................................................................................................................................................................................................</span> <span style="font-size: 16px;">................................................................................................................................................................................................</span> <span style="font-size: 16px;">................................................................................................................................................................................................</span> <span style="font-size: 16px;">................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................</span><img src="https://image.wxopen.club/content_28d596a6-0219-11ee-843e-acde48001122.jpg" style="height: auto;"/><img src="https://image.wxopen.club/content_28d596a6-0219-11ee-843e-acde48001122.jpg" style="height: auto;"/></p></div>]]></description>
      <author>magang</author>
      <pubDate>Fri, 02 Jun 2023 10:39:39 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[新域名已完成备案,被微信和QQ拦截说包含色情信息。？]]></title>
      <link>https://wxopen.club/topic/647b4bdd4cdb06243e5a86bb</link>
      <guid>https://wxopen.club/topic/647b4bdd4cdb06243e5a86bb</guid>
      <description><![CDATA[<div class="markdown-text"><p style="color: rgb(0, 0, 0); font-size: 14px; line-height: 23.8px; font-family: 微软雅黑;">很抱歉，你在2023-03-07&nbsp;17:40:22申诉的网站blogmao.cn，由于仍然存在违反腾讯网址安全中心相关标准的行为（标准详情请参考&nbsp;<a href="https://urlsec.qq.com/eviltype.html" rel="noopener noreferrer" style="color: rgb(30, 84, 148);" target="_blank">https://urlsec.qq.com/eviltype.html</a>&nbsp;），所以申诉的网站将继续保持封禁。请按照标准解决相关问题后再重新提交，我们将尽快为你审核。如有疑问，可以以“网址处理结果申诉”为主题，“网址：申诉的网址。原因：申诉的原因”为邮件内容，发送到<a href="mailto:urlsecappeal@qq.com" rel="noopener noreferrer" style="color: rgb(30, 84, 148);" target="_blank">urlsecappeal@qq.com</a>。</p>
<p style="color: rgb(0, 0, 0); font-size: 14px; line-height: 23.8px; font-family: 微软雅黑;">审核不通过的原因：网站存在恶意链接。相关违规链接如下：</p>
<p style="color: rgb(0, 0, 0); font-size: 14px; line-height: 23.8px; font-family: 微软雅黑;"><a href="http://www.blogmao.cn/" rel="noopener noreferrer" style="color: rgb(30, 84, 148);" target="_blank">http://www.blogmao.cn/</a></p>
<p style="color: rgb(0, 0, 0); font-size: 14px; line-height: 23.8px; font-family: 微软雅黑;">blogmao.cn</p>
<p style="color: rgb(0, 0, 0); font-size: 14px; line-height: 23.8px; font-family: 微软雅黑;">温馨提示：腾讯网址安全中心提醒您，近期有人冒充网址安全中心客服以解封的名义骗取解封费用，我们在此申明腾讯网址安全中心不会以任何名义收取任何费用，任何收取费用的解封都是骗子，请认准官方申诉渠道。</p>
<p>以上域名是我自己新购买的 不存在任何违规内容。（已完成个人备案）</p>
</div>]]></description>
      <author>zhouyan</author>
      <pubDate>Fri, 02 Jun 2023 10:27:43 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[品牌已入库添加却无法发布商品选择品牌]]></title>
      <link>https://wxopen.club/topic/647b4a5f4cdb06243e5a85ad</link>
      <guid>https://wxopen.club/topic/647b4a5f4cdb06243e5a85ad</guid>
      <description><![CDATA[<div class="markdown-text"><p style="line-height: 23.8px; font-size: 14px; margin-bottom: 24px;">我国趣品牌之前已经提交审核品牌库时已达到当时要求并且已成功添加至店铺内，但是现在保证金缴纳完成后要发布商品时无法选中国趣品牌进行发布，希望帮忙看下是什么原因并帮忙处理一下！谢谢您！</p>
<p style="line-height: 23.8px; font-size: 14px; margin-bottom: 24px;">如果说平台改变了规则的问题，那我觉得你即使变更了规则，也不应该把我们之前已经按照要求入驻了的平台进行清掉啊，我保证金交完才发现无法选中平台发布！</p>
<p style="line-height: 23.8px; font-size: 14px; margin-bottom: 24px;">还请平台小二能够核实情况给予解决，谢谢！</p>
<p style="line-height: 23.8px; font-size: 14px; margin-bottom: 24px;"><img src="https://image.wxopen.club/content_b76d1bb0-0218-11ee-843e-acde48001122.png"/><img src="https://image.wxopen.club/content_b77cbe3a-0218-11ee-843e-acde48001122.png"/><img src="https://image.wxopen.club/content_b78b2556-0218-11ee-843e-acde48001122.png"/></p>
</div>]]></description>
      <author>xiuying39</author>
      <pubDate>Fri, 02 Jun 2023 06:31:44 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[微信小程序加载百度地图瓦片数据（使用leafletwx地图组件）]]></title>
      <link>https://wxopen.club/topic/647b4a2e4cdb06243e5a8584</link>
      <guid>https://wxopen.club/topic/647b4a2e4cdb06243e5a8584</guid>
      <description><![CDATA[<div class="markdown-text"><blockquote style="font-size: 16px;">leafletwx是基于leaflet，使用微信原生组件开发的一套开源地图组件，目的是替换小程序内的原生map组件，项目开源地址：<a href="https://gitee.com/zz2022com/leafletwx" rel="noopener noreferrer" style="color: rgb(78, 161, 219);" target="_blank">leatletwx</a>。</blockquote>
<blockquote style="font-size: 16px;"><span style="color: rgb(77, 77, 77);">&nbsp;本示例开源地址在</span><a href="https://gitee.com/zz2022com/leafletwx" rel="noopener noreferrer" style="color: rgb(78, 161, 219);" target="_blank">leafletwx</a><span style="color: rgb(77, 77, 77);">的bdmap页面。</span></blockquote>
<blockquote style="font-size: 16px;"><br/></blockquote>
<blockquote style="font-size: 16px;">本示例使用的其他组件：</blockquote>
<blockquote style="font-size: 16px;">1.tileLayer.baidu.js来自开源项目<a href="https://github.com/muyao1987/leaflet-tileLayer-baidugaode" rel="noopener noreferrer" style="font-size: 16px;" target="_blank">leaflet-tileLayer-baidugaode</a>，将<span style="font-size: 16px;">引入</span>leaflet改为<span style="font-size: 16px;">引入</span>leafletwx。</blockquote>
<blockquote style="font-size: 16px;"><span style="font-size: 16px;">2.proj4.js、proj4leaflet.js</span></blockquote>
<blockquote style="font-size: 16px;"><span style="font-size: 16px;">以上组件都可以在dbmap页面中获取到</span></blockquote>
<p><strong style="font-size: 20px;">pages/bdmap/bdmap.js</strong></p>
<pre class="ql-syntax" spellcheck="false"><span class="hljs-comment">//&nbsp;pages/bdmap/bdmap.js</span>
<span class="hljs-keyword">var</span>&nbsp;L&nbsp;=&nbsp;<span class="hljs-built_in">require</span>(<span class="hljs-string">'../../components/zhgeo/leafletwx'</span>)
<span class="hljs-built_in">require</span>(<span class="hljs-string">'./tileLayer.baidu'</span>)
<span class="hljs-keyword">import</span>&nbsp;{createMap}&nbsp;<span class="hljs-keyword">from</span>&nbsp;<span class="hljs-string">'../../components/zhgeo/base.map'</span>
<span class="hljs-keyword">import</span>&nbsp;{DefaultIcons}&nbsp;<span class="hljs-keyword">from</span>&nbsp;<span class="hljs-string">'../../components/zhgeo/config.js'</span>;
<span class="hljs-keyword">const</span>&nbsp;defaultIcons&nbsp;=&nbsp;<span class="hljs-keyword">new</span>&nbsp;DefaultIcons();
Page({
&nbsp;&nbsp;<span class="hljs-comment">/**
&nbsp;&nbsp;&nbsp;*&nbsp;页面的初始数据
&nbsp;&nbsp;&nbsp;*/</span>
&nbsp;&nbsp;data:&nbsp;{
&nbsp;&nbsp;},
&nbsp;&nbsp;<span class="hljs-comment">/**
&nbsp;&nbsp;&nbsp;*&nbsp;生命周期函数--监听页面加载
&nbsp;&nbsp;&nbsp;*/</span>
&nbsp;&nbsp;onLoad(options)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-keyword">const</span>&nbsp;container&nbsp;=&nbsp;<span class="hljs-keyword">this</span>.selectComponent(<span class="hljs-string">'#bd-leafletwx'</span>)
&nbsp;&nbsp;&nbsp;&nbsp;createMap(container,&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;crs:&nbsp;L.CRS.Baidu,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minZoom:&nbsp;<span class="hljs-number">3</span>,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxZoom:&nbsp;<span class="hljs-number">18</span>,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zoom:&nbsp;<span class="hljs-number">18</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">map</span>)&nbsp;</span>{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L.tileLayer.baidu({&nbsp;layer:&nbsp;<span class="hljs-string">'vec'</span>&nbsp;}).addTo(map),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.setView([<span class="hljs-number">31.300635</span>,&nbsp;<span class="hljs-number">120.632314</span>]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-comment">//&nbsp;添加marker</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-keyword">let</span>&nbsp;m&nbsp;=&nbsp;L.marker([<span class="hljs-number">31.300635</span>,&nbsp;<span class="hljs-number">120.632314</span>],&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src:&nbsp;defaultIcons.locationNow,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;<span class="hljs-number">32</span>,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;<span class="hljs-number">32</span>,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showInCenter:&nbsp;<span class="hljs-literal">false</span>,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}).addTo(map);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-comment">//&nbsp;删除marer</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-comment">//&nbsp;map.removeLayer(&nbsp;m&nbsp;);</span>
&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;},
})
</pre>
<p><strong style="font-size: 20px;">pages/bdmap/bdmap.json</strong></p>
<pre class="ql-syntax" spellcheck="false">{
&nbsp;&nbsp;<span class="hljs-attr">"usingComponents"</span>:&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-attr">"v-leaflet"</span>:&nbsp;<span class="hljs-string">"/components/zhgeo/zhgeo-component"</span>
&nbsp;&nbsp;}
}
</pre>
<p><strong style="font-size: 20px;">pages/bdmap/bdmap.wxml</strong></p>
<pre class="ql-syntax" spellcheck="false"><span class="hljs-comment">&lt;!--pages/bdmap/bdmap.wxml--&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">view</span>&nbsp;<span class="hljs-attr">class</span>=<span class="hljs-string">"container"</span>&gt;</span>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-tag">&lt;<span class="hljs-name">v-leaflet</span>&nbsp;<span class="hljs-attr">id</span>=<span class="hljs-string">"bd-leafletwx"</span>&gt;&lt;/<span class="hljs-name">v-leaflet</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
</pre>
<p><strong style="font-size: 20px;">pages/bdmap/bdmap.wxss</strong></p>
<pre class="ql-syntax" spellcheck="false"><span class="hljs-comment">/*&nbsp;pages/bdmap/bdmap.wxss&nbsp;*/</span>
</pre>
<p><strong style="font-size: 20px;">地图展示：</strong></p>
<img src="https://image.wxopen.club/content_9a5a86fc-0218-11ee-843e-acde48001122.png" style="height: auto;"/></div>]]></description>
      <author>xiulan36</author>
      <pubDate>Fri, 02 Jun 2023 06:26:11 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[小程序使用 openaiwidget 做敏感词过滤]]></title>
      <link>https://wxopen.club/topic/647b49a24cdb06243e5a8506</link>
      <guid>https://wxopen.club/topic/647b49a24cdb06243e5a8506</guid>
      <description><![CDATA[<div class="markdown-text"><h2>环境</h2>
<blockquote>
<p>小程序<br>
openaiwidget 1.2.23</p>
</blockquote>
<h2>参考</h2>
<p>1 <a href="https://developers.weixin.qq.com/doc/aispeech/mini_program/sensitive.html" rel="noopener" target="_blank">敏感内容检测</a><br>
2 openaiwidget：小程序后台-&gt;设置-&gt;第三方设置-&gt;插件管理-&gt;添加插件-&gt;搜索“openaiwidget”</p>
<h2>使用 openaiwidget 做敏感词过滤</h2>
<h3>引入插件</h3>
<p>修改小程序根目录的 <code>app.json</code>，添加 <code>chatbot</code>：</p>
<pre class="hljs"><code>{
  <span class="hljs-string">"pages"</span>: [
    <span class="hljs-string">"pages/index/index"</span>
  ],
  <span class="hljs-string">"plugins"</span>: {
    <span class="hljs-string">"chatbot"</span>: {
      <span class="hljs-string">"version"</span>: <span class="hljs-string">"1.2.23"</span>,
      <span class="hljs-string">"provider"</span>: <span class="hljs-string">"wx8c631f7e9f2465e1"</span>
    }
  },
  <span class="hljs-string">"requiredBackgroundModes"</span>: [
    <span class="hljs-string">"audio"</span>
  ],
  <span class="hljs-string">"sitemapLocation"</span>: <span class="hljs-string">"sitemap.json"</span>
}
</code></pre>
<h3>初始化</h3>
<p>修改小程序根目录的 <code>app.js</code>：</p>
<pre class="hljs"><code>  onLaunch() {
    <span class="hljs-keyword">this</span>.initPlugin();
  },
  initPlugin() {
    plugin.init({
      <span class="hljs-attr">appid</span>: <span class="hljs-string">"P5Ot9PHJDechCYqDFAW1AiK6OtG3Ja"</span>, <span class="hljs-comment">//小程序示例账户，仅供学习和参考</span>
      <span class="hljs-attr">openid</span>: <span class="hljs-string">"oB6jg6ENstneouhXefbujwJl7v2n"</span>, <span class="hljs-comment">//用户的openid，非必填，建议传递该参数</span>
      <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-params">()</span> =&gt;</span> {}, <span class="hljs-comment">//非必填</span>
      <span class="hljs-attr">fail</span>: <span class="hljs-function">(<span class="hljs-params">error</span>) =&gt;</span> {}, <span class="hljs-comment">//非必填</span>
    });
  },
</code></pre>
<h3>调用敏感内容检测接口</h3>
<p>判断是否敏感依据<a href="https://developers.weixin.qq.com/doc/aispeech/mini_program/sensitive.html#%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%E6%98%AF%E5%90%A6%E4%B8%BA%E6%95%8F%E6%84%9F%E5%86%85%E5%AE%B9" rel="noopener" target="_blank">如何判断是否为敏感内容</a>，我定 other 小于 0.9 即为敏感。</p>
<pre class="hljs"><code><span class="hljs-keyword">var</span> plugin = requirePlugin(<span class="hljs-string">"chatbot"</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">check</span>(<span class="hljs-params">inputWord</span>) </span>{
    <span class="hljs-keyword">let</span> isSensitive = <span class="hljs-literal">false</span>;
    plugin.api.nlp(<span class="hljs-string">'sensitive'</span>, {<span class="hljs-attr">q</span>: inputWord, <span class="hljs-attr">mode</span>: <span class="hljs-string">'cnn'</span>}).then(<span class="hljs-function"><span class="hljs-params">res</span> =&gt;</span> {
        isSensitive = <span class="hljs-keyword">this</span>.checkIsSensitive(res);
        <span class="hljs-keyword">if</span> (isSensitive) { 
            <span class="hljs-built_in">console</span>.debug(<span class="hljs-string">'输入的内容'</span>+inputWord+<span class="hljs-string">'敏感'</span>);
            <span class="hljs-keyword">return</span>;
        }
    });
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">checkIsSensitive</span>(<span class="hljs-params">res</span>) </span>{
    <span class="hljs-keyword">let</span> isSensitive = <span class="hljs-literal">false</span>;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i &lt; res.result.length; i++) {
        <span class="hljs-keyword">if</span> (res.result[i][<span class="hljs-number">0</span>] === <span class="hljs-string">'other'</span> &amp;&amp; res.result[i][<span class="hljs-number">1</span>] &lt; <span class="hljs-number">0.9</span>) {
            isSensitive = <span class="hljs-literal">true</span>;
            <span class="hljs-keyword">break</span>;
        }
    }
    <span class="hljs-keyword">return</span> isSensitive;
}
</code></pre></div>]]></description>
      <author>shaowei</author>
      <pubDate>Fri, 02 Jun 2023 06:06:49 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[视频号小店推出「先用后付」功能]]></title>
      <link>https://wxopen.club/topic/647b4a504cdb06243e5a85a2</link>
      <guid>https://wxopen.club/topic/647b4a504cdb06243e5a85a2</guid>
      <description><![CDATA[<div class="markdown-text"><p style=" line-height: 2; font-size: 17px; ; ; ; "><strong style="font-size: 18pt;">一、什么是先用后付？</strong></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><span style="font-size: 12pt;">支持小店用户0元下单后先体验商品，订单确认收货时再支付货款的一种支付方式。</span></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><strong style="font-size: 18pt;">二、开通后如何设置服务功能？</strong></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><span style="font-size: 12pt;">支持开启先用后付服务的商品，在</span><strong style="font-size: 12pt;">「商品管理-新增商品-商品编辑-保障」</strong><span style="font-size: 12pt;">板块进行设置。</span></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><strong style="font-size: 16px;">注：当前仅支持“一级类目：服饰内衣”，陆续开放其余类目，以系统显示与平台公告为准。</strong></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><span style="font-size: 12pt;"><img src="https://image.wxopen.club/content_aec52412-0218-11ee-843e-acde48001122.png"/></span></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><strong style="font-size: 18pt;">三、对订单结算周期有什么样的影响？</strong></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><span style="font-size: 12pt;">不会有影响，结算周期仍按照</span><a href="https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/vIbVZU6ufYDGrix5" rel="noopener noreferrer" style="font-size: 12pt; color: var(--weui-LINK);" target="_blank">《视频号小店结算规则说明》</a><span style="font-size: 12pt;">中 “2.1 视频号商品结算周期”部分。</span></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><strong style="font-size: 18pt;">四、该服务功能是否会额外向商家收取费用？</strong></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><span style="font-size: 12pt;">不会额外收取。先用后付的服务费，是技术服务费的一种，技术服务费收取标准按照</span><a href="https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/V838SRNPiAcPJ8yh" rel="noopener noreferrer" style="font-size: 12pt; color: var(--weui-LINK);" target="_blank">《视频号商家技术服务费管理规则》</a><span style="font-size: 12pt;">。</span></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><strong style="font-size: 18pt;">五、用户发生了售后怎么处理？</strong></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><span style="font-size: 12pt;">先用后付商品的售后处理规则与常规商品一致，商家需要按照</span><a href="https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/9bTUazUl9xxSvz1q" rel="noopener noreferrer" style="font-size: 12pt; color: var(--weui-LINK);" target="_blank">《视频号橱窗售后服务管理规则》</a><span style="font-size: 12pt;">的规则履行售后义务。</span></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><strong style="font-size: 18pt;">六、用户不支付货款怎么办？</strong></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><span style="font-size: 12pt;">先用后付订单适用常规订单的确认收货规则，支持自动确认收货，确认收货后货款会从用户账户中扣除; 若消费者不付款，平台会垫资支付给商家，无资损风险。</span></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><strong style="font-size: 18pt;">七、该服务功能如何关闭？</strong></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><span style="font-size: 12pt;">进入</span><a href="https://channels.weixin.qq.com/shop/home/" rel="noopener noreferrer" style="font-size: 12pt; color: var(--weui-LINK);" target="_blank">视频号小店后台</a><span style="font-size: 12pt;">在左侧导航栏「平台服务-先用后付」板块进行“关闭服务”操作。</span></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><strong style="font-size: 18pt;">八、为什么有的消费者看不到/无法使用先用后付服务?</strong></p>
<p style=" line-height: 2; font-size: 17px; ; ; ; "><span style="font-size: 12pt;">先用后付服务正在陆续向小店用户开放中，用户开通该服务后，将根据用户在平台内的购物行为/习惯等。因此不同用户可能存在差异，具体以商品上带有「先用后付」标识为准。</span></p>
<p><a href="https://mp.weixin.qq.com/s/BGH5YJbnHDFpZtLyED7yEA" rel="noopener noreferrer" target="_blank">https://mp.weixin.qq.com/s/BGH5YJbnHDFpZtLyED7yEA</a></p>
</div>]]></description>
      <author>jing14</author>
      <pubDate>Fri, 02 Jun 2023 05:03:01 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[《黑暗荣耀》成话题制造机，自媒体人追剧的4大姿势…]]></title>
      <link>https://wxopen.club/topic/647b4b8a4cdb06243e5a867a</link>
      <guid>https://wxopen.club/topic/647b4b8a4cdb06243e5a867a</guid>
      <description><![CDATA[<div class="markdown-text"><p style="font-size: 16px; text-align: center;"><img src="https://image.wxopen.club/content_68e0c34c-0219-11ee-843e-acde48001122.gif"/></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">距离奈飞神剧《黑暗荣耀2》开播虽已过去十余天，但多个与剧情相关的话题却仍还在微博热搜榜上占据一席之地。</span></p>
<p><img src="https://image.wxopen.club/content_68fa8e76-0219-11ee-843e-acde48001122.png" alt=""></p>
<p style="text-align: center;">图 | 截图自“微博”</p>
<p style="font-size: 16px; text-align: justify;"><br/></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">为何《黑暗荣耀2》能在话题风向瞬息万变的互联网上受到网友的持续关注？除了电视剧本身制作精良的画面和逻辑缜密的剧情，还多亏了自媒体们的推波助澜。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">《黑暗荣耀》两季电视剧从剧内到剧外可延展的话题度都极高，自媒体们有充足的创作空间，不少媒体、博主，甚至个人用户都自发地为该剧进行二改、解说、创作段子或表情包，大量的图文和视频让《黑暗荣耀》系列在互联网反复“出圈”。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">自媒体们争先恐后地为该剧创作内容，形成“自来水”式的宣传是为了什么？原因之一大概是为了“蹭热点”。</span></p>
<p><strong>1、为什么自媒体们</strong></p>
<p><strong>喜欢追影视剧热点？</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">自媒体追热点的方式有很多，例如节日热点、社会时事、明星八卦…像《黑暗荣耀》此类的热剧也是自媒体们“有效蹭热点”的方式之一，包括《狂飙》《去有风的地方》，大小博主都靠着追影视剧热点创作出爆款内容。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">在小红书上，一些粉丝只有100+的素人博主也通过参与“黑暗荣耀”相关的话题图文创作出点赞量1w+的爆文，还登上了首页热门和推荐。点进部分博主主页后发现，他们平时的图文点赞量一般只有个位数或两位数。</span><strong style="font-size: 15px; color: rgb(51, 51, 51); letter-spacing: 1px;">可见，利用影视剧热点创作产生爆款内容是大有可能的。</strong></p>
<p><img src="https://image.wxopen.club/content_6919cdf4-0219-11ee-843e-acde48001122.jpg" alt=""></p>
<p style="text-align: center;">图 | 截图自“小红书”</p>
<p style="font-size: 16px; text-align: justify;"><br/></p>
<p><strong style="font-size: 15px; letter-spacing: 1px; color: rgb(51, 51, 51);">热门电视剧受众群体广，所能给创作者带来的流量是十分可观的</strong><span style="font-size: 15px; letter-spacing: 1px; color: rgb(102, 102, 102);">。一部热门电视剧创造的ip影响力不容小觑，在各大平台搜索热剧的相关话题所展示出的数据一般都很高。</span></p>
<p><span style="color: rgb(102, 102, 102); font-size: 15px; letter-spacing: 1px;">随着互联网的内容发展，如今的影视剧观众们不仅局限在追剧，在看剧之余，影视剧的“内容周边”也成为观众为之津津乐道的。</span></p>
<p><span style="color: rgb(102, 102, 102); font-size: 15px; letter-spacing: 1px;">他们乐忠于搜索影视剧相关解说和段子，对于优质的内容还会自发传播分享，由于用户群体足够广，所以对于自媒体内容的传播提供了有利的帮助。</span></p>
<p><span style="color: rgb(102, 102, 102); font-size: 15px; letter-spacing: 1px;">除此之外，相比于其他热点，</span><strong style="color: rgb(51, 51, 51); font-size: 15px; letter-spacing: 1px;">各行各类的自媒体创作者都能在一部热门影视剧中找到可结合的话题，进行“毫无痕迹”地蹭热点</strong><span style="color: rgb(102, 102, 102); font-size: 15px; letter-spacing: 1px;">。</span></p>
<p><span style="color: rgb(102, 102, 102); font-size: 15px; letter-spacing: 1px;">在抖音上搜索“黑暗荣耀”，可以发现平台上的热门内容包括剧情解说、同款穿搭、仿妆，甚至减脂健身赛道的博主也参与其中。</span></p>
<p><img src="https://image.wxopen.club/content_69340c96-0219-11ee-843e-acde48001122.jpg" alt=""></p>
<p style="text-align: center;">图 | 截图自“抖音”</p>
<p style="font-size: 16px; text-align: justify;"><br/></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">不仅如此，前段时间随着《狂飙》、《去有风的地方》热播，旅游类内容也激起了不小的水花，在小红书上“狂飙打卡地”“去有风的地方同款拍照地”引起了热度，甚至带动了江门、大理等拍摄地的旅游业。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">《狂飙》的热播也带动了公众号上知识号主深度解析《孙子兵法》的浪潮。据小编观察，相关文章中有不少阅读量达到10w+。</span></p>
<p style="text-align: center;"><img src="https://image.wxopen.club/content_69541f7c-0219-11ee-843e-acde48001122.png" style="height: auto;"/></p>
<p style="text-align: center;">图 | 截图自“微信公众号”</p>
<p style="font-size: 16px; text-align: justify;"><br/></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">有号主表示：在文章中提及《狂飙》后，</span><strong style="font-size: 15px; color: rgb(51, 51, 51); letter-spacing: 1px;">阅读量相比之前同样解说《孙子兵法》的文章有很大的涨幅。</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">可见，自媒体们面对影视剧热点时，不要觉得八竿子打不着。毕竟，</span><strong style="font-size: 15px; color: rgb(51, 51, 51); letter-spacing: 1px;">热剧这个流量蛋糕，只要你脑洞足够大就能分到一块</strong><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">。</span></p>
<p><strong>2、影视剧热点该如何追？</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">热点一般都是突发、有时效性的，很考验创作者的反应力和即时创作能力。但相比于其他热点，</span><strong style="font-size: 15px; color: rgb(51, 51, 51); letter-spacing: 1px;">影视剧的时效性相对较低，留给创作者充足的创作空间和时限</strong><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">。一些经典ip，包括《甄嬛传》、《武林外传》等剧在开播多年后仍能在互联网上引起广泛的关注度。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">那么，该怎么追呢？可以从以下几点寻找创作灵感。</span></p>
<p><strong>1）剧情解说</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">“高开高走”的神剧《黑暗荣耀》，两季总共只有短短的16集，那么如何在有限的集数内展现高质量剧情背后紧密的逻辑？导演在拍摄过程中大概率会抛弃无用冗长的情节，把镜头背后的深意留给观众去无尽地想象和解读，由此可见自媒体可以通过剧情解读吸引观众参与讨论。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">对于影视剧的剧情解读可以从</span><strong style="font-size: 15px; color: rgb(51, 51, 51); letter-spacing: 1px;">人物关系、角色分析、历史背景</strong><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">等方向进行发挥。</span></p>
<p><strong>2）明星话题</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">对于参与出演的演员进行话题讨论是常见的方式，明星们自带粉丝流量，他们身上也有许多可以延展的话题。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">从讨论剧内的表现到扒</span><strong style="font-size: 15px; color: rgb(51, 51, 51); letter-spacing: 1px;">同款穿搭和妆容</strong><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">，明星本身能创造的话题是很广的。除此之外，近两年大爆的</span><strong style="font-size: 15px; color: rgb(51, 51, 51); letter-spacing: 1px;">“cp营销”</strong><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">也是利用明星来制造话题度。</span></p>
<p style="text-align: center;"><img src="https://image.wxopen.club/content_696a9554-0219-11ee-843e-acde48001122.jpg"/>图 | 截图自“抖音”</p>
<p><strong>3）抠细节</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">“抠细节”也是自媒体平台上传播较广的影视剧热门内容，一部剧有哪些细节可以抠呢？</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">首先是</span><strong style="font-size: 15px; color: rgb(51, 51, 51); letter-spacing: 1px;">剧情</strong><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">部分，例如《黑暗荣耀》，不少网友就通过“放大镜”式看剧，发现了反派主角之一的李莎拉（剧内是瘾君子人设）手臂上的针孔。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">其次是一些</span><strong style="font-size: 15px; color: rgb(51, 51, 51); letter-spacing: 1px;">穿帮镜头截图</strong><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">，一部分网友执着于找到影视剧中的穿帮部分，早期的电视剧例如《甄嬛传》就曾被网友扒出好几处穿帮镜头，网友对于这些截图或片段更是津津热道。</span></p>
<p><img src="https://image.wxopen.club/content_69802496-0219-11ee-843e-acde48001122.jpg" alt=""></p>
<p style="text-align: center;">图 | 截图自“小红书”</p>
<p><strong>4）引起情感共鸣</strong></p>
<p style="line-height: 1.75em;"><span style="letter-spacing: 1px; font-size: 15px; color: rgb(102, 102, 102);">一部热剧能受到广泛喜爱，除了优良制作，还需要能引起观众的情感共鸣。</span></p>
<p style="line-height: 1.75em;"><br/></p>
<p style="line-height: 1.75em;"><span style="letter-spacing: 1px; font-size: 15px; color: rgb(102, 102, 102);">如何引起情感共鸣？可以是</span><strong style="letter-spacing: 1px; font-size: 15px; color: rgb(51, 51, 51);">从剧情延伸出的社会话题讨论</strong><span style="letter-spacing: 1px; font-size: 15px; color: rgb(102, 102, 102);">，《黑暗荣耀》围绕的主题是“反对校园暴力”，不少博主通过分享校园暴力的经历在平台上引起不少关注，通过与用户共情呼吁停止校园暴力。</span></p>
<p style="line-height: 1.75em;"><br/></p>
<p style="line-height: 1.75em;"><span style="letter-spacing: 1px; font-size: 15px; color: rgb(102, 102, 102);">引起情感共鸣的创作方式还有分享和讨论</span><strong style="letter-spacing: 1px; font-size: 15px; color: rgb(51, 51, 51);">影视剧中的金句</strong><span style="letter-spacing: 1px; font-size: 15px; color: rgb(102, 102, 102);">。文字的力量是强大的，一些影视剧中的金句能够表达出一部分人的内心情感，当看到那些金句截图的时候，不少用户会忍不住进行点赞转发收藏的动作。</span></p>
<p><strong>3、不同类型的自媒体</strong></p>
<p><strong>如何搭上影视剧的“快车”？</strong></p>
<p><strong>1）娱乐类账户</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">与影视剧热点最契合的账号类型首先是娱乐时尚类自媒体。这类账号蹭热点时不仅不尴尬，可创作的内容更是多种多样。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">无论是从剧情人设的解读，还是明星八卦的延伸，都可以轻松蹭上热点。</span></p>
<p><strong>2）情感类账号</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">情感类账号追影视热点离不开深扒剧情背后的情感体验。对电视剧本身不会有太多的解读，往往是由一个剧情引申出深刻的含义。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">例如不少公众号文章利用《黑暗荣耀》深度解析校园暴力下引起青少年抑郁症的社会问题；以及当初爆火的《欢乐颂》中樊胜美在原生家庭中遭遇重男轻女的情况也吸引了不少情感类创作者对此类现象的热议。</span></p>
<p><strong>3）美妆时尚类账号</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">对于美妆时尚类账号，内容离不开对明星从妆容到穿搭的深扒。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">作为女性平台较多的小红书，美妆时尚类博主们热衷于模仿明星穿搭和妆容，借助影视剧的热度能够轻松获得流量。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">还有不少博主会对影视剧中主演们的穿搭做详细分析，列出品牌、价格等信息，此类内容的热度也很高，同时还能带动品牌的销售。</span></p>
<p><img src="https://image.wxopen.club/content_6997a210-0219-11ee-843e-acde48001122.jpg" alt=""></p>
<p style="text-align: center;">图 | 截图自“小红书”</p>
<p><strong>4）旅游类账号</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">打卡热剧同款旅游地是当代年轻人的乐趣之一。电视剧的拍摄选址一般都是有文化背景或风景优美的地方，通过影视剧背后专业的拍摄团队拍摄后，剧中优美的风景强烈刺激着观众的视觉感受。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">不少旅游者会将热剧拍摄地安排进旅游清单，所以旅游博主们可以选择创作影视剧同款拍摄地的旅游攻略，此类内容比较容易做出热点。</span></p>
<p><strong>5）其他类型账号</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">除了以上几类账号，还有哪些账号可以针对热剧蹭热点呢？</span></p>
<p><strong style="font-size: 15px; letter-spacing: 1px; color: rgb(51, 51, 51);">职场账号</strong><span style="font-size: 15px; letter-spacing: 1px; color: rgb(102, 102, 102);">：针对职场剧做职场小白攻略；分享职场故事</span></p>
<p><strong style="font-size: 15px; letter-spacing: 1px; color: rgb(51, 51, 51);">摄影账号</strong><span style="font-size: 15px; letter-spacing: 1px; color: rgb(102, 102, 102);">：模仿剧内场景仿拍，提供摄影技巧攻略</span></p>
<p><strong style="font-size: 15px; letter-spacing: 1px; color: rgb(51, 51, 51);">美食账号</strong><span style="font-size: 15px; letter-spacing: 1px; color: rgb(102, 102, 102);">：复刻美食剧中的同款菜品</span></p>
<p><strong style="font-size: 15px; letter-spacing: 1px; color: rgb(51, 51, 51);">家居账号</strong><span style="font-size: 15px; letter-spacing: 1px; color: rgb(102, 102, 102);">：分析剧内布景，提供装修思路和好物推荐</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">…</span></p>
<p><strong>4、写在最后</strong></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">有的自媒体博主担心自己的赛道与影视剧毫不相干，即使创作出爆文对于涨粉和变现的帮助也是微不足道的。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">如上文所写，有这种担忧其实是没有从影视剧中挖掘到与自己账号相对应的话题内容。运营账号就如同品牌营销，先找准定位，再锁定目标群体，最后筛选出与账号调性相关的话题去自我营销。</span></p>
<p><span style="font-size: 15px; color: rgb(102, 102, 102); letter-spacing: 1px;">总而言之，无论是什么类型的账号，</span><strong style="font-size: 15px; color: rgb(51, 51, 51); letter-spacing: 1px;">影视热点不存在该不该追的问题，而是思考该怎么追。</strong></p>
</div>]]></description>
      <author>wangxiuying</author>
      <pubDate>Fri, 02 Jun 2023 05:01:11 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[分包小程序，如何让npm独立依赖以及独立分包使用npm]]></title>
      <link>https://wxopen.club/topic/647b4bd24cdb06243e5a86b1</link>
      <guid>https://wxopen.club/topic/647b4bd24cdb06243e5a86b1</guid>
      <description><![CDATA[<div class="markdown-text"><p><em><strong>科普帖子</strong></em><br>
看社区里很多人问分包小程序，<strong>如何让npm独立依赖以及独立分包使用npm</strong><br>
主要是需要在 project.config.json 添加如下配置：</p>
<pre class="hljs"><code><span class="hljs-string">"setting"</span>: {
  <span class="hljs-string">"packNpmManually"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-string">"packNpmRelationList"</span>: [
    {
      <span class="hljs-string">"packageJsonPath"</span>: <span class="hljs-string">"./src_node_modules_1/package.json"</span>,
      <span class="hljs-string">"miniprogramNpmDistDir"</span>: <span class="hljs-string">"./miniprogram/"</span>
    },
    {
      <span class="hljs-string">"packageJsonPath"</span>: <span class="hljs-string">"./src_node_modules_2/package.json"</span>,
      <span class="hljs-string">"miniprogramNpmDistDir"</span>: <span class="hljs-string">"./miniprogram/sub_package"</span>
    }
  ]
}
</code></pre>
<p>然后就这些了，<strong>最重要的一点是：修改了project.config.json配置后一定要重启开发工具的项目，然后在执行构建npm即可</strong>。</p>
<p>示例代码片段：<a href="https://developers.weixin.qq.com/s/w7U0xBmu7AGL" rel="noopener" target="_blank">https://developers.weixin.qq.com/s/w7U0xBmu7AGL</a></p>
</div>]]></description>
      <author>gang80</author>
      <pubDate>Fri, 02 Jun 2023 02:18:13 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[申请小程序长期订阅消息模板，管理员五一假期快乐！]]></title>
      <link>https://wxopen.club/topic/647b4a4a4cdb06243e5a859c</link>
      <guid>https://wxopen.club/topic/647b4a4a4cdb06243e5a859c</guid>
      <description><![CDATA[<div class="markdown-text"><p style="line-height: 1;"><span style="letter-spacing: 0pt; font-size: 14px;">【小程序appid】</span><span style="font-size: 14px;">wxf96ccd5466ba5484</span></p>
<p style="line-height: 1;"><span style="letter-spacing: 0pt; font-size: 14px;">【小程序主体】</span><span style="font-size: 14px;">邯郸市未来计算机信息科技有限公司</span></p>
<p style="line-height: 1;"><span style="letter-spacing: 0pt; font-size: 14px;">【申请模板类目】</span><span style="font-size: 14px;">工具 &gt; 信息查询 </span></p>
<p style="line-height: 1;"><span style="letter-spacing: 0pt; font-size: 14px;">【申请模板名称】消费/充值信息通知</span></p>
<p style="line-height: 1;"><span style="letter-spacing: 0pt; font-size: 10.5pt;">【使用场景】当商户在“未来云会员管理系统”程序中对会员进行消费、充值操作时在本小程序中发送消息通知，用户收到消息后可点击进入小程序查看详细的消费、充值记录。收到消息的用户均为线下主动扫码并在商家办理会员的用户，不存在骚扰营销行为。且一次性订阅消息无法满足用户需求，用户很容易错失消费通知，导致用户体验感极差，望管理审核为盼！</span></p>
<p style="line-height: 1;"><span style="letter-spacing: 0pt; font-size: 10.5pt;">【模板字段】</span></p>
<p><span style="font-size: 14px;">内容 {{thing01.DATA}}</span></p>
<p><span style="font-size: 14px;">时间 {{time01.DATA}}</span></p>
<p style="line-height: 1;"><span style="font-size: 14px;">备注 {{thing02.DATA}}</span></p>
<p><span style="letter-spacing: 0pt; font-size: 10.5pt;">【消息示例】</span></p>
<p><span style="letter-spacing: 0pt; font-size: 14px;">内容  您在</span><span style="font-size: 14px;">「演示美甲美发店」</span><span style="letter-spacing: 0pt; font-size: 14px;">店内有消费/充值操作，请点击查看。</span></p>
<p><span style="letter-spacing: 0pt; font-size: 14px;">时间  2023年5月3日 11:50:30</span></p>
<p><span style="font-size: 14px;">备注  如非本人消费，请及时联系商家。</span></p>
</div>]]></description>
      <author>hjiang</author>
      <pubDate>Thu, 01 Jun 2023 23:06:39 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[刷新平台Token失败，且授权小程序Token异常失效]]></title>
      <link>https://wxopen.club/topic/647bf1f8c7adf41c3b1c8bcf</link>
      <guid>https://wxopen.club/topic/647bf1f8c7adf41c3b1c8bcf</guid>
      <description><![CDATA[<div class="markdown-text"><p><strong>接口URL:</strong> <a href="https://api.weixin.qq.com/cgi-bin/component/api_component_token" rel="noopener noreferrer" style="letter-spacing: -0.08px; font-size: 12px; color: rgb(52, 55, 65);" target="_blank">https://api.weixin.qq.com/cgi-bin/component/api_component_token</a></p>
<p><strong style="letter-spacing: -0.08px; font-size: 12px; color: rgb(52, 55, 65);">接口入参: </strong></p>
<pre class="ql-syntax" spellcheck="false">{<span class="hljs-attr">"component_appid"</span>:<span class="hljs-string">"*****"</span>,<span class="hljs-attr">"component_appsecret"</span>:<span class="hljs-string">"*****"</span>,<span class="hljs-attr">"component_verify_ticket"</span>:<span class="hljs-string">"ticket@@@LuQLL4lL-tY3B1ifAb9SqUY_az1uUGzQ_Hphx_Cbh969MNj41nQ9Q2dnQrBEfkaLFTCS10SIO_ZadY-LV3TURQ"</span>}
</pre>
<p><strong>接口相应结果：</strong></p>
<pre class="ql-syntax" spellcheck="false">{<span class="hljs-attr">"errcode"</span>:<span class="hljs-number">48001</span>,<span class="hljs-attr">"errmsg"</span>:<span class="hljs-string">"api unauthorized rid: 6475fe10-3f57e3a1-6d6eec81"</span>}
</pre>
<p style="border: none;">接口调用时间：2023/05/30 21:45:53</p></div>]]></description>
      <author>wei61</author>
      <pubDate>Thu, 01 Jun 2023 23:00:12 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[小程序审核封禁问题]]></title>
      <link>https://wxopen.club/topic/647b4a794cdb06243e5a85c5</link>
      <guid>https://wxopen.club/topic/647b4a794cdb06243e5a85c5</guid>
      <description><![CDATA[<div class="markdown-text"><p>希望官方运营管理能够看到</p>
<p>我们小程序ID：<span style="font-size: 14px;">wx85c0c1660b7d677e</span></p>
<p><span style="font-size: 14px;">运营盲盒小程序   实体企业注册，每次用户进行反馈都会进行满足需求与要求</span></p>
<p>微信小程序官方审核站内信通知警告进行要求我们整改我们也做出整改</p>
<p>发货与规则问题得需要代码方面整改还没有完成，今天直接来 封禁</p>
<p>在微信公众平台 监管客服 也说过 要求我们进行代码整改重新发布就可以</p>
<p>微信支付商户今天也不能用 商户号：1642059329 </p>
<p>我们不圈任何东西正常发货 都能赢得五星好评满意度</p>
<p>小程序方面我们积极配合微信小程序官方审核组进行整改</p>
<p>也采纳用户进行对于我们反馈要求进行采纳更新优化</p>
<p>希望能给机会</p>
<p><img src="https://image.wxopen.club/content_c69e3704-0218-11ee-843e-acde48001122.png" alt=""><img src="https://image.wxopen.club/content_c6af783e-0218-11ee-843e-acde48001122.png" alt=""></p>
</div>]]></description>
      <author>huping</author>
      <pubDate>Thu, 01 Jun 2023 17:51:59 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[又一个首日10W+的答题活动]]></title>
      <link>https://wxopen.club/topic/647b4a2d4cdb06243e5a8583</link>
      <guid>https://wxopen.club/topic/647b4a2d4cdb06243e5a8583</guid>
      <description><![CDATA[<div class="markdown-text"><p>又一个首日10W+的答题活动，<strong style="color: rgb(250, 81, 81);">「本以为才开始，没想到是巅峰」</strong></p>
<p>~</p>
<p>做答题活动小程序也有三年了，现在一个10万用户的答题活动，对我而言，好像内心也没波动了</p>
<p>基本除了活动过程中的流量肝的那个肉疼。</p>
<p>那么对于一个日活10W的答题小程序每天的开支是多少呢？</p>
<p>可以看下一个10W日活的云开发答题小程序的费用支出情况</p>
<p>1、</p>
<p>目前流量是调用1000万次了</p>
<p><img src="https://image.wxopen.club/content_98f27ff4-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>2、</p>
<p>用户已接近10万，因为距离12点还有1个小时，我想破10万已经不需要怀疑了</p>
<p><img src="https://image.wxopen.club/content_990e1570-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>3、</p>
<p>如果不升级套餐，按照基础套餐，那么这个流量要有多少支出呢？</p>
<p>我们只算其中一项，也就是费用中的大头，0.5元每万次调用，那么今晚1000万次 0.5*1000 = 500元，真的太贵了，这还只是其中一项费用，七七八八加起来大概要接近600块</p>
<p><img src="https://image.wxopen.club/content_9924a948-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>4、</p>
<p>还好可以买一些相对划算的套餐，就可以解决整个活动过程的所有开支</p>
<p><img src="https://image.wxopen.club/content_994040d6-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>5、例行说下，在活动开始的前一日需要做哪些准备工作</p>
<p>1）升级套餐，按照预估的人数购买合适的套餐；</p>
<p>2）数据库设置索引；</p>
<p>简单截图几张</p>
<p>1</p>
<img src="https://image.wxopen.club/content_99754344-0218-11ee-843e-acde48001122.jpg" width="502px"/>
<p>2</p>
<img src="https://image.wxopen.club/content_9987737a-0218-11ee-843e-acde48001122.jpg" width="499px"/>
<p>3</p>
<img src="https://image.wxopen.club/content_999a85f0-0218-11ee-843e-acde48001122.jpg" width="506px"/>
<p>4</p>
<img src="https://image.wxopen.club/content_99a695de-0218-11ee-843e-acde48001122.jpg" width="509px"/>
<p>5</p>
<img src="https://image.wxopen.club/content_99bc7a20-0218-11ee-843e-acde48001122.jpg" width="512px"/>
<p>6</p>
<p><img src="https://image.wxopen.club/content_99d6fb16-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>7</p>
<p>五四答题活动</p>
<p><img src="https://image.wxopen.club/content_99ea1002-0218-11ee-843e-acde48001122.jpg" alt=""></p>
</div>]]></description>
      <author>xiulanwen</author>
      <pubDate>Thu, 01 Jun 2023 17:41:42 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[vaa.wxss：一款让你的微信小程序页面焕然一新的样式库]]></title>
      <link>https://wxopen.club/topic/647b4bfd4cdb06243e5a86d9</link>
      <guid>https://wxopen.club/topic/647b4bfd4cdb06243e5a86d9</guid>
      <description><![CDATA[<div class="markdown-text"><p style="background-color: rgba(255, 255, 255, 0.6);"><a href="https://developers.weixin.qq.com/community/develop/article/doc/000cc8604f432879515f081b65d813" rel="noopener noreferrer" style="color: inherit;" target="_blank">vaa.wxss 是一套样式语言，用于描述 WXML 的组件样式。它具有 CSS 大部分特性，同时也进行了扩充和修改，以适应微信小程序的开发需求。</a><a href="https://developers.weixin.qq.com/community/develop/article/doc/000cc8604f432879515f081b65d813" rel="noopener noreferrer" style="color: var(--cib-color-brand-tertiary-foreground); font-size: 10px;" target="_blank">1</a><a href="https://github.com/vaaagle/VaaWxss" rel="noopener noreferrer" style="color: var(--cib-color-brand-tertiary-foreground); font-size: 10px;" target="_blank">2</a><a href="https://github.com/vaaagle/VaaWxss" rel="noopener noreferrer" style="color: inherit;" target="_blank">&nbsp;vaa.wxss 还将 fontAwesome 作为默认的字体图标库，让你可以轻松地使用各种美观的图标。</a><a href="https://github.com/vaaagle/VaaWxss" rel="noopener noreferrer" style="color: var(--cib-color-brand-tertiary-foreground); font-size: 10px;" target="_blank">2</a></p>
<p style="background-color: rgba(255, 255, 255, 0.6); margin-top: 10px;"><a href="https://developers.weixin.qq.com/community/develop/article/doc/000cc8604f432879515f081b65d813" rel="noopener noreferrer" style="color: inherit;" target="_blank">vaa.wxss 的使用方法也非常简单，只需要在需要使用 vaa 样式库的页面下的 .wxss 文件中引入 vaa.wxss 文件即可。</a>无论是布局、颜色、字体、边框、动画等等，vaa.wxss 都能帮助你快速实现。vaa.wxss 是一个值得你尝试的 Wxss 框架，它可以帮助你提升你的微信小程序开发水平和体验。快来下载 vaa.wxss 吧！</p>
<p><img src="https://image.wxopen.club/content_ae7c85a8-0219-11ee-843e-acde48001122.png" alt=""></p>
</div>]]></description>
      <author>leiliang</author>
      <pubDate>Thu, 01 Jun 2023 17:36:14 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[小程序图片裁剪功能实现]]></title>
      <link>https://wxopen.club/topic/647b4bce4cdb06243e5a86ad</link>
      <guid>https://wxopen.club/topic/647b4bce4cdb06243e5a86ad</guid>
      <description><![CDATA[<div class="markdown-text"><p>裁剪框的拖动与缩放</p>
<p>在裁剪框的元素部分，增加 touchstart 和 touchmove 等事件，用于在处理拖动和缩放等操作。</p>
<p>当我们实现裁剪框的拖动，只需要如下两个事件：</p>
<pre class="ql-syntax" spellcheck="false">touchstartM (event) {
&nbsp; <span class="hljs-keyword">const</span> { clipX, clipY } = <span class="hljs-keyword">this</span>.data
&nbsp; <span class="hljs-keyword">const</span> { pageX, pageY } = event.touches[<span class="hljs-number">0</span>]
&nbsp; <span class="hljs-comment">// 获取鼠标点在裁剪框的内部位置信息</span>
&nbsp; clipBoxMoveInnerX = pageX - clipX
&nbsp; clipBoxMoveInnerY = pageY - clipY
},
touchmoveM (event) {
&nbsp; <span class="hljs-keyword">const</span> { pageX, pageY } = event.touches[<span class="hljs-number">0</span>]
&nbsp; <span class="hljs-keyword">const</span> { panelWidth, panelHeight, clipHeight, clipWidth } = <span class="hljs-keyword">this</span>.data

&nbsp; <span class="hljs-comment">// 裁剪框不能脱离面板</span>
&nbsp; <span class="hljs-comment">// X位置范围为 0 到 (面板宽度-裁剪框宽度)</span>
&nbsp; <span class="hljs-keyword">let</span> clipX = pageX - clipBoxMoveInnerX
&nbsp; clipX = <span class="hljs-built_in">Math</span>.max(clipX, <span class="hljs-number">0</span>)
&nbsp; <span class="hljs-keyword">const</span> panelX = panelWidth - clipWidth
&nbsp; clipX = <span class="hljs-built_in">Math</span>.min(clipX, panelX)
&nbsp; <span class="hljs-comment">// Y位置范围为 0 到 (面板高度-裁剪框高度)</span>
&nbsp; <span class="hljs-keyword">let</span> clipY = pageY - clipBoxMoveInnerY
&nbsp; clipY = <span class="hljs-built_in">Math</span>.max(clipY, <span class="hljs-number">0</span>)
&nbsp; <span class="hljs-keyword">const</span> panleY = panelHeight - clipHeight
&nbsp; clipY = <span class="hljs-built_in">Math</span>.min(clipY, panleY)

&nbsp; <span class="hljs-comment">// 裁剪框底图位置信息</span>
&nbsp; <span class="hljs-keyword">const</span> clipImgX = <span class="hljs-number">0</span> - clipX
&nbsp; <span class="hljs-keyword">const</span> clipImgY = <span class="hljs-number">0</span> - clipY

&nbsp; <span class="hljs-keyword">this</span>.setData({
&nbsp; &nbsp; clipX,
&nbsp; &nbsp; clipY,
&nbsp; &nbsp; clipImgX,
&nbsp; &nbsp; clipImgY
&nbsp; })
}
</pre>
<p>以上代码，通过计算图片移动时的相对位移，重新计算裁剪框的新的位置信息，需要注意的是，移动时不要脱离外层的面板——即不能脱离图片区域，否则无效。</p>
<p>缩放的操作则相对复杂一些，需要计算位移移动的距离以及当前位置下的裁剪宽高数据，并且要对每个不同的corner角进行特殊处理，这块的完整代码和注释如下所示：</p>
<p>// 处理缩放动作中不同corner时的尺寸位置信息</p>
<pre class="ql-syntax" spellcheck="false">getClipX (clipWidth) {
&nbsp; <span class="hljs-keyword">switch</span> (activeCorner) {
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'leftTop'</span>:
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'leftBottom'</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> clipBoxBeforeScaleClipX + (clipBoxBeforeScaleWidth - clipWidth)
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'rightTop'</span>:
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'rightBottom'</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> clipBoxBeforeScaleClipX
&nbsp; &nbsp; <span class="hljs-keyword">default</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>
&nbsp; }
},
getClipY (clipHeight) {
&nbsp; <span class="hljs-keyword">switch</span> (activeCorner) {
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'leftTop'</span>:
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'rightTop'</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> clipBoxBeforeScaleClipY + (clipBoxBeforeScaleHeight - clipHeight)
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'leftBottom'</span>:
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'rightBottom'</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> clipBoxBeforeScaleClipY
&nbsp; &nbsp; <span class="hljs-keyword">default</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>
&nbsp; }
},
getScaleXWidthOffset (offsetW) {
&nbsp; <span class="hljs-keyword">switch</span> (activeCorner) {
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'leftTop'</span>:
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'leftBottom'</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> -offsetW
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'rightTop'</span>:
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'rightBottom'</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> offsetW
&nbsp; &nbsp; <span class="hljs-keyword">default</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>
&nbsp; }
},
getScaleYHeightOffset (offsetH) {
&nbsp; <span class="hljs-keyword">switch</span> (activeCorner) {
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'rightBottom'</span>:
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'leftBottom'</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> offsetH
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'rightTop'</span>:
&nbsp; &nbsp; <span class="hljs-keyword">case</span> <span class="hljs-string">'leftTop'</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> -offsetH
&nbsp; &nbsp; <span class="hljs-keyword">default</span>:
&nbsp; &nbsp; &nbsp; <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>
&nbsp; }
},
touchstart (event) {
&nbsp; <span class="hljs-keyword">const</span> dragId = event.currentTarget.dataset.id
&nbsp; <span class="hljs-keyword">const</span> { pageX, pageY } = event.touches[<span class="hljs-number">0</span>]
&nbsp; <span class="hljs-keyword">const</span> { clipX, clipY, clipHeight, clipWidth } = <span class="hljs-keyword">this</span>.data

&nbsp; <span class="hljs-comment">// 设置缩放时临时变量初始化值</span>
&nbsp; activeCorner = dragId
&nbsp; clipBoxBeforeScalePageX = pageX
&nbsp; clipBoxBeforeScalePageY = pageY
&nbsp; clipBoxBeforeScaleClipX = clipX
&nbsp; clipBoxBeforeScaleClipY = clipY
&nbsp; clipBoxBeforeScaleWidth = clipWidth
&nbsp; clipBoxBeforeScaleHeight = clipHeight
},
touchmove (event) {
&nbsp; <span class="hljs-keyword">const</span> { pageX, pageY } = event.touches[<span class="hljs-number">0</span>]
&nbsp; <span class="hljs-keyword">const</span> { panelWidth, panelHeight } = <span class="hljs-keyword">this</span>.data

&nbsp; <span class="hljs-comment">// 缩放在X上的偏移</span>
&nbsp; <span class="hljs-keyword">const</span> xWidthOffset = <span class="hljs-keyword">this</span>.getScaleXWidthOffset(pageX - clipBoxBeforeScalePageX)
&nbsp; <span class="hljs-comment">// 裁剪框最小宽度36</span>
&nbsp; <span class="hljs-keyword">let</span> clipWidth = <span class="hljs-built_in">Math</span>.max(clipBoxBeforeScaleWidth + xWidthOffset, <span class="hljs-number">36</span>)
&nbsp; <span class="hljs-comment">// 设置缩放最大宽度，放大时不能超过面板、缩小时不能超过初始裁剪框</span>
&nbsp; <span class="hljs-keyword">let</span> tempPanelWidth = pageX &gt; clipBoxBeforeScalePageX ? panelWidth - clipBoxBeforeScaleClipX : clipBoxBeforeScaleWidth + clipBoxBeforeScaleClipX
&nbsp; <span class="hljs-comment">// 设置裁剪框宽度</span>
&nbsp; clipWidth = <span class="hljs-built_in">Math</span>.min(clipWidth, tempPanelWidth)

&nbsp; <span class="hljs-comment">// 缩放在Y上的偏移</span>
&nbsp; <span class="hljs-keyword">const</span> yHeightOffset = <span class="hljs-keyword">this</span>.getScaleYHeightOffset(pageY - clipBoxBeforeScalePageY)
&nbsp; <span class="hljs-comment">// 裁剪框最小高度36</span>
&nbsp; <span class="hljs-keyword">let</span> clipHeight = <span class="hljs-built_in">Math</span>.max(clipBoxBeforeScaleHeight + yHeightOffset, <span class="hljs-number">36</span>)
&nbsp; <span class="hljs-comment">// 设置缩放最大高度，放大时不能超过面板、缩小时不能超过初始裁剪框</span>
&nbsp; <span class="hljs-keyword">let</span> tempPanelHeight = pageY &gt; clipBoxBeforeScalePageY ? panelHeight - clipBoxBeforeScaleClipY : clipBoxBeforeScaleHeight + clipBoxBeforeScaleClipY
&nbsp; <span class="hljs-comment">// 设置裁剪框高度</span>
&nbsp; clipHeight = <span class="hljs-built_in">Math</span>.min(clipHeight, tempPanelHeight)

&nbsp; <span class="hljs-comment">// 裁剪框位置信息</span>
&nbsp; <span class="hljs-keyword">let</span> clipX = <span class="hljs-keyword">this</span>.getClipX(clipWidth)
&nbsp; <span class="hljs-keyword">let</span> clipY = <span class="hljs-keyword">this</span>.getClipY(clipHeight)
&nbsp; <span class="hljs-comment">// 裁剪框底图位置信息</span>
&nbsp; <span class="hljs-keyword">let</span> clipImgX = <span class="hljs-number">0</span> - clipX
&nbsp; <span class="hljs-keyword">let</span> clipImgY = <span class="hljs-number">0</span> - clipY

&nbsp; <span class="hljs-keyword">this</span>.setData({
&nbsp; &nbsp; clipWidth,
&nbsp; &nbsp; clipHeight,
&nbsp; &nbsp; clipX,
&nbsp; &nbsp; clipY,
&nbsp; &nbsp; clipImgX,
&nbsp; &nbsp; clipImgY,
&nbsp; &nbsp; croppingImageWidth: <span class="hljs-built_in">parseInt</span>(clipWidth / xScale),
&nbsp; &nbsp; croppingImageHeight: <span class="hljs-built_in">parseInt</span>(clipHeight / yScale)
&nbsp; })
}
</pre>
<p>至此，图片裁剪的功能基本完成了，能够加载图片、设置裁剪框、拖动和缩放裁剪框大小，计算裁剪图片的尺寸等等。</p>
<p>就剩下如何真正剪裁图片了。</p>
<p>增加canvas并裁剪图片</p>
<p>要剪裁图片，我们在小程序使用canvas画布组件来处理，在页面上增加一个canvas元素：</p>
<p>&lt;canvas id=“main” canvasId=“main” class=“main-canvas” style=“width: {{croppingImageWidth + ‘px’}}; height: {{croppingImageHeight + ‘px’}}”&gt;&lt;/canvas&gt;</p>
<p>1</p>
<p>由于这个canvas只是用来对图片进行裁剪操作，并不需要显示出来，我们可以把它定位到视觉窗口以外，不影响可操作的界面元素。</p>
<p>给画布设置图片裁剪所需要的宽高，通过在同等宽高下绘制图片，就能导出图片：</p>
<pre class="ql-syntax" spellcheck="false">wx.showLoading({ <span class="hljs-attr">title</span>: <span class="hljs-string">'正在裁剪...'</span> })
preCtx.clearRect(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, imageWidth, imageHeight)
<span class="hljs-keyword">const</span> width = croppingImageWidth
<span class="hljs-keyword">const</span> height = croppingImageHeight
<span class="hljs-keyword">const</span> xPos = <span class="hljs-built_in">Math</span>.abs(clipImgX / xScale)
<span class="hljs-keyword">const</span> yPos = <span class="hljs-built_in">Math</span>.abs(clipImgY / yScale)
<span class="hljs-comment">// 绘制裁剪区内的图片到画布上</span>
preCtx.drawImage(imagePath, xPos, yPos, width, height, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, width, height)
preCtx.save()
preCtx.restore()
<span class="hljs-keyword">const</span> that = <span class="hljs-keyword">this</span>
preCtx.draw(<span class="hljs-literal">false</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> () </span>{
&nbsp; setTimeout(<span class="hljs-function"><span class="hljs-params">()</span> =&gt;</span> {
&nbsp; &nbsp; <span class="hljs-comment">// 将画布导出为临时图片文件</span>
&nbsp; &nbsp; wx.canvasToTempFilePath({
&nbsp; &nbsp; &nbsp; <span class="hljs-attr">x</span>: <span class="hljs-number">0</span>,
&nbsp; &nbsp; &nbsp; <span class="hljs-attr">y</span>: <span class="hljs-number">0</span>,
&nbsp; &nbsp; &nbsp; width,
&nbsp; &nbsp; &nbsp; height,
&nbsp; &nbsp; &nbsp; <span class="hljs-attr">destWidth</span>: width,
&nbsp; &nbsp; &nbsp; <span class="hljs-attr">destHeight</span>: height,
&nbsp; &nbsp; &nbsp; <span class="hljs-attr">canvasId</span>: <span class="hljs-string">'main'</span>,
&nbsp; &nbsp; &nbsp; <span class="hljs-attr">success</span>: <span class="hljs-function">(<span class="hljs-params">canRes</span>) =&gt;</span> {
&nbsp; &nbsp; &nbsp; &nbsp; wx.hideLoading()
&nbsp; &nbsp; &nbsp; &nbsp; that.initImage(width, height, canRes.tempFilePath)
&nbsp; &nbsp; &nbsp; },
&nbsp; &nbsp; &nbsp; fail (err) {
&nbsp; &nbsp; &nbsp; &nbsp; wx.hideLoading()
&nbsp; &nbsp; &nbsp; &nbsp; <span class="hljs-built_in">console</span>.log(err)
&nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; })
&nbsp; }, <span class="hljs-number">200</span>)
})
</pre>
<p>如上代码所示，通过裁剪图片的真实宽高以及相对位置信息，通过canvas的 drawImage 方法，把图片的裁剪区域的内容绘制到画布上，此时，该画布就对应一张裁剪后的图片，我们只需要把画布导出成图片文件即可。</p>
<p>导出画布，使用 wx.canvasToTempFilePath 方法，用于将画布导出为图片临时图片文件，这个图片文件可以重新加载或者进行导出。</p>
<p>保存图片到相册</p>
<p>以上过程，生成裁剪图片的临时文件后，就可以使用小程序提供的API，将图片文件保存到相册中。</p>
<p>只需要使用 wx.saveImageToPhotosAlbum 方法，专门用于将图片文件保存到系统相册，接收临时文件作为参数：</p>
<pre class="ql-syntax" spellcheck="false">wx.saveImageToPhotosAlbum({
&nbsp; <span class="hljs-attribute">filePath</span>: imgSrc,
&nbsp; success: () =&gt; {
&nbsp; &nbsp; wx.<span class="hljs-built_in">hideLoading</span>()
&nbsp; &nbsp; wx.<span class="hljs-built_in">vibrateShort</span>()
&nbsp; &nbsp; wx.<span class="hljs-built_in">showModal</span>({
&nbsp; &nbsp; &nbsp; content: <span class="hljs-string">'图片已保存到相册~'</span>,
&nbsp; &nbsp; &nbsp; showCancel: false,
&nbsp; &nbsp; &nbsp; confirmText: <span class="hljs-string">'好的'</span>,
&nbsp; &nbsp; &nbsp; confirmColor: <span class="hljs-string">'#333'</span>
&nbsp; &nbsp; })
&nbsp; }
})
</pre>
<p>该方法简单方便，其中使用 wx.vibrateShort() 方法，作用是使手机发生较短时间的振动（15 ms），在小城序也是常见的功能。</p>
<p>图片保存到系统相册功能完成后，我们就实现了在小程序中进行图片剪裁的完整功能，包含加载图片、图片适配和裁剪框绘制、裁剪框拖动与缩放事件、图片导出和保存的过程。</p>
<p>总结</p>
<p>本文详细讲述了在小程序中实现一个图片裁剪功能的过程，可以看出和在浏览器Web端的实现差别并不大。</p>
<p>在核心的图片适配、裁剪框绘制与缩放事件处理上，基本两边可以通用，在小程序中的实现逻辑可以完整在移到web浏览器上，反之亦然。</p>
<p>区别可能只只在于图片的加载和保存上，可以使用小程序提供的多种内置接口方法，能教方便的完成。</p>
</div>]]></description>
      <author>chaocui</author>
      <pubDate>Thu, 01 Jun 2023 14:06:27 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[关于微信公众号原创封禁问题]]></title>
      <link>https://wxopen.club/topic/647b4b934cdb06243e5a867d</link>
      <guid>https://wxopen.club/topic/647b4b934cdb06243e5a867d</guid>
      <description><![CDATA[<div class="markdown-text"><p>今天无缘无故的公众号原创被封禁，我找客服说下，你们腾讯客服就是这样回复的？连一点理论知识不懂？竟然能这么回复我们博主？足球比赛的时间和队伍名称，文章不能写，写了就不算原创，竟然还跟我说这比赛是你举办的吗 是在你这开赛的吗 ？你们腾讯就请这样的客服做服务的？来来 看下聊天记录！！</p>
<p><img src="https://image.wxopen.club/content_6f00a3d2-0219-11ee-843e-acde48001122.jpg" alt=""><img src="https://image.wxopen.club/content_6f0d6220-0219-11ee-843e-acde48001122.jpg" alt=""></p>
</div>]]></description>
      <author>houqiang</author>
      <pubDate>Thu, 01 Jun 2023 09:20:48 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[网赌遇到出款通道维护不能提款怎么办？]]></title>
      <link>https://wxopen.club/topic/647b4bb54cdb06243e5a8698</link>
      <guid>https://wxopen.club/topic/647b4bb54cdb06243e5a8698</guid>
      <description><![CDATA[<div class="markdown-text"><p><span style="color: rgb(51, 51, 51); letter-spacing: 0pt; font-size: 10.5pt;">现在接口网站多之甚多，系统审核的毕竟多。在你输钱时候看不出来，只要你出款是却发现系统审核 账号异常等情况，只要发现及时 处理妥当是能够追回的。为什么总是被黑 因为接口平台根本不存在，所以就拿送彩金之类骗你上钩，要知道天下没有免费的午餐，羊毛长在羊身上，不黑你黑谁啊。现在说这些也为时已晚。说百分之百能够除黑的都是骗子，特别是要前期费用的 空间《86//94///555///04》日志 有关追回的办法，希望可以帮到你</span></p>
</div>]]></description>
      <author>fangjuan</author>
      <pubDate>Thu, 01 Jun 2023 09:09:52 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[答题积分小程序云开发实战-界面交互篇：答题页布局样式与逻辑交互开发]]></title>
      <link>https://wxopen.club/topic/647b4a134cdb06243e5a856d</link>
      <guid>https://wxopen.club/topic/647b4a134cdb06243e5a856d</guid>
      <description><![CDATA[<div class="markdown-text"><p style="text-align: justify; font-size: 18px;">微信小程序云开发实战-答题积分赛小程序</p>
<h1 style="text-align: justify;">界面交互篇：答题页布局样式与逻辑交互开发</h1>
<h1 style="text-align: justify;">答题页原型稿</h1>
<p style="text-align: justify; font-size: 18px;">实现思路分析：</p>
<p style="text-align: justify; font-size: 18px;">1）答题未选中状态；</p>
<p style="text-align: justify; font-size: 18px;">2）答题已选中状态，点击确定提交选中结果；</p>
<p style="text-align: justify; font-size: 18px;">3）显示答案以及题目解析，如回答正确，自动进入下一题；如回答错误，停留在当前答题页面；</p>
<p style="text-align: justify; font-size: 18px;">4）每次答完10题，答对分数才会计入积分；</p>
<p style="text-align: justify; font-size: 18px;">5）最后系统自动判分，然后出成绩单。</p>
<p style="text-align: justify; font-size: 18px;"><img src="https://image.wxopen.club/content_89c15b5e-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify; font-size: 18px;"><br/></p>
<h1 style="text-align: justify;">答题页效果图</h1>
<p style="text-align: justify; font-size: 18px;"><img src="https://image.wxopen.club/content_89d493f4-0218-11ee-843e-acde48001122.png"/></p>
<h1 style="text-align: justify;">答题页布局与样式实现</h1>
<p style="text-align: justify; font-size: 18px;">使用 flex 布局即可快速实现各区域模块的排版布局：</p>
<p style="text-align: justify; font-size: 18px;">1）页面布局主要使用flex布局；</p>
<p style="text-align: justify; font-size: 18px;">2）个人信息展示区域采用flex-wrap；</p>
<p style="text-align: justify; font-size: 18px;">3）答题详情展示区域采用flex-sub；</p>
<p style="text-align: justify; font-size: 18px;">4）操作按钮组区域采用flex-direction；</p>
<h1 style="text-align: justify;">个人信息展示区域</h1>
<p style="text-align: justify; font-size: 18px;">在test.wxml中，编写布局代码：</p>
<pre class="ql-syntax" spellcheck="false" style="background-color: rgb(250, 250, 250); margin-bottom: 20px; margin-top: 20px; font-size: 18px;">&lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"page-con"</span>&gt;
&nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"page"</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"flex flex-wrap solids-bottom padding-bottom"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'basis-xs'</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"cu-avatar round lg margin-left"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">image</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"avatar"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/images/0.png"</span> <span class="hljs-attr">mode</span>=<span class="hljs-string">"widthFix"</span>&gt;&lt;/<span class="hljs-name">image</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'basis-xl'</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"padding-top text-bold text-black"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 姑苏洛言
&nbsp; &nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
&nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
</pre>
<p style="text-align: justify; font-size: 18px;">在test.wxss中，编写样式代码：</p>
<pre class="ql-syntax" spellcheck="false" style="color: rgb(34, 34, 34); background-color: rgb(250, 250, 250); margin-bottom: 20px; margin-top: 20px; font-size: 18px;">page {
  <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#fff</span>;
}
.page-con {
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">20</span>rpx;
}
.page {
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">20</span>rpx;
  <span class="hljs-attribute">border</span>: <span class="hljs-number">2</span>rpx solid <span class="hljs-number">#ddd</span>;
  <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">10</span>rpx;
}
</pre>
<p style="text-align: justify; font-size: 18px;">保存后，可以在模拟器预览效果或者手机微信扫码后预览。</p>
<p style="text-align: justify; font-size: 18px;"><img src="https://image.wxopen.club/content_89e5cdfe-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify; font-size: 18px;"><br/></p>
<h1 style="text-align: justify;">答题进度展示区域</h1>
<p style="text-align: justify; font-size: 18px;">在test.wxml中，编写布局代码：</p>
<pre class="ql-syntax" spellcheck="false" style="background-color: rgb(250, 250, 250); margin-bottom: 20px; margin-top: 20px; font-size: 18px;"><span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"text-center padding-top"</span>&gt;</span>
&nbsp; 当前第<span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"text-xl text-bold"</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>题
&nbsp; 共<span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"text-xl text-bold"</span>&gt;</span>10<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>题
<span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
</pre>
<p style="text-align: justify; font-size: 18px;">保存后，可以在模拟器预览效果或者手机微信扫码后预览。</p>
<p style="text-align: justify; font-size: 18px;"><img src="https://image.wxopen.club/content_89fb221c-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify; font-size: 18px;"><br/></p>
<h1 style="text-align: justify;">题目信息展示区域</h1>
<p style="text-align: justify; font-size: 18px;">在test.wxml中，编写布局代码：</p>
<pre class="ql-syntax" spellcheck="false" style="background-color: rgb(250, 250, 250); margin-bottom: 20px; margin-top: 20px; font-size: 18px;"><span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'page-hd'</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"page-title"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"text-bold"</span>&gt;</span>【单选题】<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; 下列网络系统安全原则，错误的是：（）
&nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"page-bd"</span>&gt;</span>
&nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">radio-group</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"radio-group"</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"radio my-choosebox"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">radio</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"A"</span> <span class="hljs-attr">checked</span>=<span class="hljs-string">"false"</span> /&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"margin-left-xs"</span>&gt;</span>A、静态性<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"radio my-choosebox"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">radio</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"B"</span> <span class="hljs-attr">checked</span>=<span class="hljs-string">"false"</span> /&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"margin-left-xs"</span>&gt;</span>B、严密性<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"radio my-choosebox"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">radio</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"C"</span> <span class="hljs-attr">checked</span>=<span class="hljs-string">"false"</span> /&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"margin-left-xs"</span>&gt;</span>C、整体性<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"radio my-choosebox"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">radio</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"D"</span> <span class="hljs-attr">checked</span>=<span class="hljs-string">"false"</span> /&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"margin-left-xs"</span>&gt;</span>D、专业性<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
&nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">radio-group</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
</pre>
<p style="text-align: justify; font-size: 18px;">在test.wxss中，编写样式代码：</p>
<pre class="ql-syntax" spellcheck="false" style="color: rgb(34, 34, 34); background-color: rgb(250, 250, 250); margin-bottom: 20px; margin-top: 20px; font-size: 18px;">.page-hd {
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">30</span>rpx <span class="hljs-number">0</span>;
}
.page-bd {
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">20</span>rpx;
}
.page .radio-group, .page .checkbox-group {
  <span class="hljs-attribute">display</span>: block;
}
.my-choosebox {
  <span class="hljs-attribute">display</span>: block;
  <span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">20</span>rpx;
  <span class="hljs-attribute">border</span>: <span class="hljs-number">2</span>rpx solid <span class="hljs-number">#ddd</span>;
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">20</span>rpx;
  <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">50</span>rpx;
}
</pre>
<p style="text-align: justify; font-size: 18px;">保存后，可以在模拟器预览效果或者手机微信扫码后预览。</p>
<p style="text-align: justify; font-size: 18px;"><img src="https://image.wxopen.club/content_8a0c9024-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify; font-size: 18px;"><br/></p>
<h1 style="text-align: justify;">操作按钮展示区域</h1>
<p style="text-align: justify; font-size: 18px;">在test.wxml中，编写布局代码：</p>
<pre class="ql-syntax" spellcheck="false" style="background-color: rgb(250, 250, 250); margin-bottom: 20px; margin-top: 20px; font-size: 18px;">&lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">'page-ft flex flex-direction padding padding-bottom-xl'</span>&gt;
&nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"cu-btn lg round bg-sky"</span>&gt;</span>确定<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
</pre>
<p style="text-align: justify; font-size: 18px;">保存后，可以在模拟器预览效果或者手机微信扫码后预览。</p>
<p style="text-align: justify; font-size: 18px;"><img src="https://image.wxopen.club/content_8a1e8720-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify; font-size: 18px;"><br/></p>
<h1 style="text-align: justify;">选中选项状态</h1>
<p style="text-align: justify; font-size: 18px;">选中选项状态时，只需要把radio的checked属性值设置为true即可。</p>
<p style="text-align: justify; font-size: 18px;"><img src="https://image.wxopen.club/content_8a325174-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify; font-size: 18px;"><br/></p>
<h1 style="text-align: justify;">点击确定后状态</h1>
<p style="text-align: justify; font-size: 18px;">点击确定按钮后的界面状态会有所变化：</p>
<p style="text-align: justify; font-size: 18px;">①【确定】按钮隐藏，显示【下一题】按钮；</p>
<p style="text-align: justify; font-size: 18px;">②显示【正确答案】栏目；</p>
<p style="text-align: justify; font-size: 18px;">在test.wxml中，编写布局代码：</p>
<pre class="ql-syntax" spellcheck="false" style="color: rgb(34, 34, 34); background-color: rgb(250, 250, 250); margin-bottom: 20px; margin-top: 20px; font-size: 18px;"><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"cu-btn lg round line-sky"</span>&gt;</span>下一题<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
</pre>
<p style="text-align: justify; font-size: 18px;">在test.wxml中，编写布局代码：</p>
<pre class="ql-syntax" spellcheck="false" style="background-color: rgb(250, 250, 250); margin-bottom: 20px; margin-top: 20px; font-size: 18px;">&lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">'padding-bottom page-hd padding-top solids-top'</span>&gt;
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"page-title"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"text-bold"</span>&gt;</span>【正确答案】<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; &nbsp; &nbsp; A
&nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
</pre>
<p style="text-align: justify; font-size: 18px;"><span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span></p>
<p style="text-align: justify; font-size: 18px;"><img src="https://image.wxopen.club/content_8a391e78-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify; font-size: 18px;"><br/></p>
<h1 style="text-align: justify;">应用场景</h1>
<p style="text-align: justify; font-size: 18px;">不少企事业单位常常会举办一些主题知识竞赛，但是目前缺乏一套可靠、美观、简便的答题小程序。比如适用于网络安全知识答题、交通安全答题、 消防安全知识宣传、 安全生产知识学习等答题活动或有奖竞答。</p>
<p style="text-align: justify; font-size: 18px;"><img src="https://image.wxopen.club/content_8a4cf4fc-0218-11ee-843e-acde48001122.png"/></p>
<h1 style="text-align: justify;">小结</h1>
<p style="text-align: justify; font-size: 18px;">因此我搭建了最新版的知识竞答小程序，提炼了典型的业务模型，它可以帮助你快速搭建各种形式的答题软件产品，帮助大家可以定期举办各类知识竞答活动。</p>
</div>]]></description>
      <author>yuanli</author>
      <pubDate>Thu, 01 Jun 2023 08:21:56 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[微商户延迟结算涉嫌交易异常怎么处理]]></title>
      <link>https://wxopen.club/topic/647b4be04cdb06243e5a86be</link>
      <guid>https://wxopen.club/topic/647b4be04cdb06243e5a86be</guid>
      <description><![CDATA[<div class="markdown-text"><p style="line-height: 30px; font-size: 18px; color: rgb(34, 34, 34); font-family: arial;">微信商户涉嫌交易异常，提示关闭支付权限延迟结算应该怎么办。</p>
<p style="line-height: 30px; font-size: 18px; color: rgb(34, 34, 34); margin-top: 24px; font-family: arial;">遇到这类情况，不用担心的，都是可以处理解决的，只需要提供真实有效，有力的交易凭证就可以解除的。</p>
<p style="line-height: 30px; font-size: 18px; color: rgb(34, 34, 34); margin-top: 24px; font-family: arial;">很多都是自己做微商或者网络项目线上收款，无法提供真实有效的交易凭证。</p>
<p style="line-height: 30px; font-size: 18px; color: rgb(34, 34, 34); margin-top: 24px; font-family: arial;"><br/></p>
<p style="line-height: 30px; font-size: 18px; color: rgb(34, 34, 34); margin-top: 24px; font-family: arial;">材料程序图下</p>
<p style="line-height: 30px; font-size: 18px; color: rgb(34, 34, 34); margin-top: 24px; font-family: arial;">﻿</p>
<p><img src="https://image.wxopen.club/content_9c9fcf48-0219-11ee-843e-acde48001122.png" alt=""></p>
<p><img src="https://image.wxopen.club/content_9cba465c-0219-11ee-843e-acde48001122.png" alt=""></p>
</div>]]></description>
      <author>ywu</author>
      <pubDate>Thu, 01 Jun 2023 08:16:05 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[视频号小店评分什么时候出我已经卖好多单了，用户也不主动确认收货]]></title>
      <link>https://wxopen.club/topic/647b4a3e4cdb06243e5a8594</link>
      <guid>https://wxopen.club/topic/647b4a3e4cdb06243e5a8594</guid>
      <description><![CDATA[<div class="markdown-text"><p>视频号小店评分什么时候可以显示出来，我已经卖好多单了，用户也不主动确认收货视频号小店评分什么时候出我已经卖好多单了，用户也不主动确认收货</p>
<p>感觉小店的审核人员有点。。。。申请的企业自己的商标还要授权？？？？？？？？？？？？？？？？？？？？？？？？？？？？？？？？？？</p>
</div>]]></description>
      <author>wei51</author>
      <pubDate>Thu, 01 Jun 2023 07:10:21 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[对于一个页面中多个input标签，输入的时候点击两次才能输入问题的解决]]></title>
      <link>https://wxopen.club/topic/647b4b3d4cdb06243e5a8637</link>
      <guid>https://wxopen.club/topic/647b4b3d4cdb06243e5a8637</guid>
      <description><![CDATA[<div class="markdown-text"><p>通过input与textarea两个标签的交替使用完美解决这个问题</p>
<p style="font-size: 16px; line-height: 32px;"><span style="color: rgb(137, 221, 255);">&lt;</span><span style="color: rgb(113, 199, 255);">input</span><span style="color: rgb(137, 221, 255);">&nbsp;</span><span style="color: rgb(192, 192, 192);">class</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">connect_contain</span><span style="color: rgb(137, 221, 255);">"&nbsp;&nbsp;</span><span style="color: rgb(192, 192, 192);">bindinput</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">essay_price</span><span style="color: rgb(137, 221, 255);">"/&gt;</span></p>
<p style="font-size: 16px; line-height: 32px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(137, 221, 255);">&lt;</span><span style="color: rgb(113, 199, 255);">textarea</span><span style="color: rgb(137, 221, 255);">&nbsp;</span><span style="color: rgb(192, 192, 192);">class</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">connect_contain</span><span style="color: rgb(137, 221, 255);">"&nbsp;</span><span style="color: rgb(192, 192, 192);">bindinput</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">essay_jianjie</span><span style="color: rgb(137, 221, 255);">"</span><span style="color: rgb(255, 83, 112);">/</span><span style="color: rgb(137, 221, 255);">&gt;</span></p>
<p style="font-size: 16px; line-height: 32px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(137, 221, 255);">&lt;</span><span style="color: rgb(113, 199, 255);">input</span><span style="color: rgb(137, 221, 255);">&nbsp;</span><span style="color: rgb(192, 192, 192);">class</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">connect_contain</span><span style="color: rgb(137, 221, 255);">"</span><span style="color: rgb(192, 192, 192);">bindinput</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">essay_connect</span><span style="color: rgb(137, 221, 255);">"/&gt;</span></p>
<p style="font-size: 16px; line-height: 32px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(137, 221, 255);">&lt;</span><span style="color: rgb(113, 199, 255);">textarea</span><span style="color: rgb(137, 221, 255);">&nbsp;</span><span style="color: rgb(192, 192, 192);">class</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">connect_contain</span><span style="color: rgb(137, 221, 255);">"&nbsp;&nbsp;</span><span style="color: rgb(192, 192, 192);">bindinput</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">essay_startlocation</span><span style="color: rgb(137, 221, 255);">"</span><span style="color: rgb(255, 83, 112);">/</span><span style="color: rgb(137, 221, 255);">&gt;</span></p>
<p style="font-size: 16px; line-height: 32px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(137, 221, 255);">&lt;</span><span style="color: rgb(113, 199, 255);">input</span><span style="color: rgb(137, 221, 255);">&nbsp;</span><span style="color: rgb(192, 192, 192);">class</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">connect_contain</span><span style="color: rgb(137, 221, 255);">"&nbsp;&nbsp;</span><span style="color: rgb(192, 192, 192);">bindinput</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">essay_endlocation</span><span style="color: rgb(137, 221, 255);">"/&gt;</span></p>
<p style="font-size: 16px; line-height: 32px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(137, 221, 255);">&lt;</span><span style="color: rgb(113, 199, 255);">textarea</span><span style="color: rgb(137, 221, 255);">&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(192, 192, 192);">maxlength</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">-1</span><span style="color: rgb(137, 221, 255);">"&nbsp;</span><span style="color: rgb(192, 192, 192);">auto-height</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">true</span><span style="color: rgb(137, 221, 255);">"&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(192, 192, 192);">auto-focus</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">true</span><span style="color: rgb(137, 221, 255);">"&nbsp;</span><span style="color: rgb(192, 192, 192);">bindinput</span><span style="color: rgb(137, 221, 255);">="</span><span style="color: rgb(250, 128, 114);">essay_comment</span><span style="color: rgb(137, 221, 255);">"&nbsp;</span><span style="color: rgb(255, 83, 112);">/</span></p>
</div>]]></description>
      <author>baijie</author>
      <pubDate>Thu, 01 Jun 2023 03:59:08 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[小程序日常测试代码片段]]></title>
      <link>https://wxopen.club/topic/647b49c24cdb06243e5a8524</link>
      <guid>https://wxopen.club/topic/647b49c24cdb06243e5a8524</guid>
      <description><![CDATA[<div class="markdown-text"><p>小程序音频播放日常测试代码片段</p>
<p>描述</p>
<p>小程序背景音乐播放，可切后台播放能力持续</p>
<p><img src="https://image.wxopen.club/content_599f3f36-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>~</p>
<p>代码片段地址</p>
<p><a href="https://developers.weixin.qq.com/s/ILZzlsmR7BIf" rel="noopener noreferrer" target="_blank">https://developers.weixin.qq.com/s/ILZzlsmR7BIf</a></p>
<p>~</p>
<p>描述</p>
<p>监听左上角返回回调</p>
<p><img src="https://image.wxopen.club/content_59b5b7d4-0218-11ee-843e-acde48001122.png" alt=""></p>
<p><a href="https://developers.weixin.qq.com/s/335Jmsm37mIw" rel="noopener noreferrer" target="_blank">https://developers.weixin.qq.com/s/335Jmsm37mIw</a></p>
<p>~</p>
<p>描述</p>
<p>webview音频播放</p>
<p><img src="https://image.wxopen.club/content_59c90f8c-0218-11ee-843e-acde48001122.png" alt=""></p>
<p><a href="https://developers.weixin.qq.com/s/Y202htmv75IQ" rel="noopener noreferrer" target="_blank">https://developers.weixin.qq.com/s/Y202htmv75IQ</a></p>
<p>webview对应的音频页面</p>
<p style=" line-height: 32px; font-size: 16px; ; ; ; "><a href="https://thahuat.pension.taikang.com/mental-health/#/audio" rel="noopener noreferrer" style="color: rgb(189, 92, 0);" target="_blank">https://thahuat.pension.taikang.com/mental-health/#/audio</a></p>
<p><img src="https://image.wxopen.club/content_59db5f98-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>~</p>
<p>音频文件</p>
<p><a href="https://thaf.pension.taikang.com/resource/" rel="noopener noreferrer" target="_blank">https://thaf.pension.taikang.com/resource/</a>通勤冥想配乐版.mp3</p>
<p>~</p>
</div>]]></description>
      <author>wzhou</author>
      <pubDate>Thu, 01 Jun 2023 03:00:36 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[视频号订单纠纷，客服介入，一直不处理，不回复！导致订单处理不了，又找不到视频号小店客服？]]></title>
      <link>https://wxopen.club/topic/647b4abc4cdb06243e5a85f2</link>
      <guid>https://wxopen.club/topic/647b4abc4cdb06243e5a85f2</guid>
      <description><![CDATA[<div class="markdown-text"><p><img src="https://image.wxopen.club/content_eee94bb8-0218-11ee-843e-acde48001122.png" alt=""><img src="https://image.wxopen.club/content_eee94bb8-0218-11ee-843e-acde48001122.png" alt=""></p>
<p>这介入4个月了 怎么样子四个月也要介入完了把 第一次见这么大公司干出这么垃圾得事情 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。</p>
</div>]]></description>
      <author>fangyuan</author>
      <pubDate>Wed, 31 May 2023 23:35:28 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[小程序被下架，连整改的时间都不给，直接把线上产品直接下架，真的服了]]></title>
      <link>https://wxopen.club/topic/647b4b564cdb06243e5a8650</link>
      <guid>https://wxopen.club/topic/647b4b564cdb06243e5a8650</guid>
      <description><![CDATA[<div class="markdown-text"><p>就算是有违规的地方，你也要给出时间让我们整改，就直接下架了，现在一堆的用户来咨询为啥用不了了，你们检查到说小程序有互推，但那些小程序都是我自己开发的，又不是第三方的，我也没有强制让它们跳转，用户喜欢点就点，有啥不符合规定的，真的有点搞不懂，麻烦官方看到了回复下，现在都已按照给到问题整改了，20多万用户的小程序说下架就下架了，严重影响到用户的使用了。</p>
</div>]]></description>
      <author>vjin</author>
      <pubDate>Wed, 31 May 2023 23:09:19 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[小程序WebAssembly原理剖析与实践应用]]></title>
      <link>https://wxopen.club/topic/647b4a1b4cdb06243e5a8574</link>
      <guid>https://wxopen.club/topic/647b4a1b4cdb06243e5a8574</guid>
      <description><![CDATA[<div class="markdown-text"><p style="   ; ; ; ; ;  ">本文转发自</p>
<p style="   ; ; ; ; ;  "><a href="https://www.sohu.com/a/673852453_100093134" rel="noopener noreferrer" target="_blank">https://www.sohu.com/a/673852453_100093134</a></p>
<p style="   ; ; ; ; ;  "><br/></p>
<p style="   ; ; ; ; ;  ">【万字长文】"网红"浪潮退去，WebAssembly原理剖析与生产应用</p>
<p style="   ; ; ; ; ;  "><br/></p>
<p style="   ; ; ; ; ;  "><strong>前言</strong>：因为工作需要对WebAssembly进行了一些研究，遗憾的是我发现整个中文社区居然没一篇博客能完整地讲清楚这项技术。工作空余时间也不多，大约花了我半年多时间才写完这2万字，你看到某一行字的背后我可能需要花几个小时去看很多的英文原文资料来论证。如果这篇文章对你有所启发，欢迎关注、点赞、收藏以及评论区交流~</p>
<p style="   ; ; ; ; ;  ">WebAssembly，前身技术来自Mozilla和Google Native Client的asm.js，首次发布于2017年3月。并于2019年12月5日正式成为W3C recommendation，至此成为与HTML、CSS以及Java 并列的web领域第四类编程语言。</p>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8de20972-0218-11ee-843e-acde48001122.png"/></p>
<p style="   ; ; ; ; ;  ">在web领域，已经有Java这样的利器，而WebAssembly则是打开新世界的大门。WebAssembly并不是要取代Java，而是要在图形图像处理、3D游戏、AR/VR这些应用领域开疆拓土。如今的现代浏览器已经越发朝着微型”第二操作系统“发展，人们希望在浏览器内能完成更多的事情，而WebAssembly作为web端高性能应用的基石，正在让更多的应用场景在浏览器内变为现实。</p>
<p style="   ; ; ; ; ;  ">除了在浏览器内实现高性能应用，WebAssembly也可以脱离web端在搭载了不同硬件和操作系统的各个平台运行，进一步实现当年JAVA所期望的“一次编译，多处运行”。WebAssembly在服务端可用于微服务平台、无服务平台、第三方插件系统等场景。</p>
<p style="   ; ; ; ; ;  ">本文共6个章节，全文逐字阅读约15分钟，具体章节介绍如下：</p>
<ol><li style="   ; ; ; ; ;  ">第一章 WebAssembly的前世今生 : 介绍了asm.js在Mozilla的起源</li><li style="   ; ; ; ; ;  ">第二章 asm.js技术 : 底层原理介绍，探讨了asm.js比原生Java更快的原因</li><li style="   ; ; ; ; ;  ">第三章 WebAssembly技术 : 底层原理介绍，探讨了WebAssembly .js比asm.js更快的原因</li><li style="   ; ; ; ; ;  ">第四章 WebAssembly在Web端的应用 : 公司内外案例，在音视频处理、游戏、web端设计工具等领域中的生产应用</li><li style="   ; ; ; ; ;  ">第五章 WebAssembly在服务端的应用 : 如果实现跨平台runtime，在微服务、无服务、容器化等场景的应用。</li><li style="   ; ; ; ; ;  ">第六章 总结展望：web应用加速的瓶颈在哪？WebAssembly到底有没有成功？</li></ol>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8df3c676-0218-11ee-843e-acde48001122.png"/></p>
<p style="   ; ; ; ; ;  ">WebAssembly技术体验可直接点击以下链接~</p>
<p style="   ; ; ; ; ;  ">看看你的浏览器能跑多少FPS？浏览器直接玩2D/3D游戏：<a href="https://arcadespot.com/game/doom-3/" rel="noopener noreferrer" target="_blank">https://arcadespot.com/game/doom-3/</a></p>
<p style="   ; ; ; ; ;  ">第一章 WebAssembly的前世今生：从Mozilla说起</p>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8e0f15f2-0218-11ee-843e-acde48001122.png"/></p>
<p style="   ; ; ; ; ;  ">Mozilla基金组织LOGO</p>
<p style="   ; ; ; ; ;  ">1.1 一家伟大的互联网企业</p>
<p style="   ; ; ; ; ;  ">说起WebAssembly，那就必须从一家没落而又伟大的互联网公司说起，它就是火狐浏览器的开发者Mozilla。Mozilla的前身是大名鼎鼎的网景公司(Netscape)，也就是Java的开发者。从做浏览器起家一路坎坷至今，Mozilla最近更是频频传出裁员风波，其根源依然是没有找到太好的盈利点。作为互联网开源社区的领跑者，Mozilla在技术上的成就远高于其在商业领域。除了Java和Filefox，Mozilla还留下了Rust、HTML5、MDN（Mozilla Developer Network）以及asm.js这些引领互联网行业发展的重要基石。</p>
<p style="   ; ; ; ; ;  ">1.2 脑洞大开的想法：浏览器里跑C++</p>
<p style="   ; ; ; ; ;  ">2012年Mozilla的工程师在研究LLVM时，突然脑洞大开提出了一个想法：类似游戏引擎这样的高性能应用大多都是C/C++语言写的，如果能将C/C++转换成 Java ，那岂不是就能在浏览器里跑起来了吗？如果可以实现，那么浏览器是不是也就可以直接跑3D游戏之类的C/C++应用？于是Mozilla成立了一个叫做Emen的编译器研发项目，&nbsp;<strong>Emen可以将C/C++代码编译成Java，但不是普通的JS，而是一种被特殊改造的JS，其被命名为asm.js</strong>。</p>
<p style="   ; ; ; ; ;  ">Emen 的官方描述是：</p>
<blockquote style="   ; ; ; ; ;  ">Emen is a toolchain for compiling to asm.js and WebAssembly, built using LLVM, that lets you run C and C++ on the web at near-native speed without plugins.</blockquote>
<p style="   ; ; ; ; ;  ">中文译文：</p>
<blockquote style="   ; ; ; ; ;  ">Emen是一个基于LLVM的将C/C++编译到asm.js和WebAssembly的工具链，它可以让你在web上以接近原生的速度运行C/C++而不需要任何插件。</blockquote>
<p style="   ; ; ; ; ;  ">如下图所示：实际上，不只是C/C++代码，只要能转换成LLVM IR的语言，都可以通过Emen转换成asm.js。</p>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8e2a46b0-0218-11ee-843e-acde48001122.png"/></p>
<p style="   ; ; ; ; ;  ">C++代码转换JS流程</p>
<p style="   ; ; ; ; ;  ">1.3 另一次失败的尝试：Google Native Client</p>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8e497da0-0218-11ee-843e-acde48001122.png"/></p>
<p style="   ; ; ; ; ;  ">Google在很早之前也一直致力于研究如何让C/C++能够在Chrome里运行起来，并在2009年的安全领域顶级会议IEEE Symposium on Security and Privacy 发表了Google的技术方案NaCl（Google Native Client）以及PNaCl（Portable Google Native Client）。NaCl的本质也是一种沙盒技术，使用工具链编译后的C/C++代码能够以接近原生应用的速度在web端运行，也可以与JS和webapi进行交互。NaCl在安全这块做了大量的设计，其使用了内外双层沙盒，并利用x86内存分段机制来隔离内存，甚至还用上了静态代码分析技术来做沙盒里运行的程序进行检查。</p>
<p style="   ; ; ; ; ;  ">然而在经过了8年的挣扎后，在2017 年5月30日Google宣布弃用NaCl。其根本原因是NaCl这套方案只有自家的Chrome愿意配合支持，所以压根就不具备跨浏览器运行的能力。最终Chrome与Mozilla达成一致，共同推进WebAssembly方案，Chrome也直接用WebAssembly替换掉了NaCl。</p>
<p style="   ; ; ; ; ;  ">第二章 asm.js：WebAssembly的前身，一种更快的JS 2.1 C++转换asm.js示例</p>
<p style="   ; ; ; ; ;  ">一般来说，asm.js并不是直接编写的，而是一个面向JS编译器的中间产物。例如以下的C++代码：</p>
<p style="   ; ; ; ; ;  ">//计算i+1int f(int i) { return i + 1;}//计算字符串长度size_t strlen(char *ptr) { char *curr = ptr; while (*curr != 0) { curr++; } return (curr - ptr);}</p>
<p style="   ; ; ; ; ;  ">使用Emen转换后，生成的JS代码如下：</p>
<p style="   ; ; ; ; ;  ">function f(i) { i = i|0; return (i + 1)|0;}function strlen(ptr) { ptr = ptr|0; var curr = 0; curr = ptr; while ((MEM8[curr&gt;&gt;0]|0) != 0) { curr = (curr + 1)|0; } return (curr - ptr)|0;}</p>
<p style="   ; ; ; ; ;  ">可以看到这种生成的JS跟普通JS还是区别很大的，就像刚才我们所说，&nbsp;<strong>程序员不直接编写asm.js代码，这些看起来怪异的语法都是为了配合编译器生成更高效的机器码</strong>。比如在asm.js里反复出现的"按位或"操作，其目的是将原来Java 里的double类型计算转为整形运算(CPU进行整形运算的速度快于浮点型)。而这里被命名为MEM8的数组实际上充当了"堆"的作用。如果只是作为使用者可以不用深究这些优化的具体实现，直接使用Emen 来帮助我们完成这一转换过程即可。</p>
<p style="   ; ; ; ; ;  ">2.2 asm.js为什么比原生Java 快？</p>
<p style="   ; ; ; ; ;  ">由于 asm.js 在浏览器中运行，其性能在很大程度上也取决于浏览器和JS引擎的优化支持。2015年6月，Microsoft Edge也开始加入了对asm. js的支持。为了直观展示asm.js所带来的的性能提升，微软发布了一个叫做"Chess Battle"的demo。Chess Battle让两个版本的开源象棋AI对战，其中一个用C实现然后转成asm.js，另外一个用原生JS实现。如下图所示，每个走棋回合限制为200毫秒，其中asm.js版本的AI因为可以在每个回合进行更多的评估运算(用于决定走棋策略)，胜率获得了极大提升。</p>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8e6d2976-0218-11ee-843e-acde48001122.gif"/></p>
<p style="   ; ; ; ; ;  ">asm.js对战原生Java</p>
<p style="   ; ; ; ; ;  "><strong>asm.js运行的快慢取决于不同的测试用例、运行硬件、浏览器引擎优化程度等，一般来说我们可认为asm.js能达到原生C/C++运行速度的50%</strong>，有些场景下甚至能持平Clang编译的C/C++用例。asm.js运行比原生js快，那么它如此高效的原因是什么呢？阮一峰在他的一篇博客里写到的结论是：</p>
<blockquote style="   ; ; ; ; ;  ">一旦 Java 引擎发现运行的是 asm.js，就知道这是经过优化的代码，可以跳过语法分析这一步，直接转成汇编语言。另外，浏览器还会调用 WebGL 通过 GPU 执行 asm.js，即 asm.js 的执行引擎与普通的 Java 脚本不同。这些都是 asm.js 运行较快的原因。</blockquote>
<p style="   ; ; ; ; ;  ">这篇博客应该是对很多人造成了误导，具体错误在于：</p>
<ol><li style="   ; ; ; ; ;  ">首先，"跳过语法分析,直接生成汇编"是不存在的，语法分析是编译中不可缺少的一环节，asm.js跟原生JS的编译运行过程是一致的。</li><li style="   ; ; ; ; ;  ">其次，WebGL作为一个图形api和asm.js技术可以说是没有任何直接关系，原生JS也调用WebGL来实现GPU硬件加速。</li><li style="   ; ; ; ; ;  ">最后，也是最离谱的一点，WebGL 通过 GPU 执行 asm.js ？不管是asm.js、原生Java还是WebAssembly其编译产物都是CPU机器码而不是GPU机器码。而且WebGL只是一个图形渲染api，就算是把JS编译到GPU也需要类似CUDA/OpenCL这些通用计算api来支持。最新的WebGPU同时支持了图形和通用计算，这倒是目前web端在GPU里"执行JS"的可行方法。</li></ol>
<p style="   ; ; ; ; ;  ">先抛开Java 不谈，我们可以思考一下，对于任何一门编程语言来说决定其运行快慢的根源是什么呢？我认为用一句话来总结就是：&nbsp;<strong>代码运行的快慢，从硬件层面上看，直接取决于生成的机器码所需时钟周期的总和。从编程语言层面上看，取决于编译后的产物在运行时有多少"动态决议"。</strong></p>
<p style="   ; ; ; ; ;  ">例如，弱类型语言比强类型语言慢，是因为编译时类型是不确定的，需要运行时进行额外的型别推导，这就是"动态决议"；</p>
<p style="   ; ; ; ; ;  ">例如，C++里虚函数比普通函数开销大，是因为编译时函数地址是不确定的。普通函数编译后生成的跳转目的地是一串固定的地址，而虚函数的跳转地址是在运行时从CPU的寄存器里读取的，这也是"动态决议"，编译后的机器码多了一条寄存器取值指令；</p>
<p style="   ; ; ; ; ;  ">类似的场景还有GC机制、模板编程、JIT优化等等，归根结底就是如果在编译时候能完成更多事情，那么生成的机器码运行周期就越短，代码也就运行地越快。asm.js在减少运行时的"动态决议”这里所做的工作，wiki原文如下：</p>
<blockquote style="   ; ; ; ; ;  ">Much of this performance gain over normal Java is due to 100% type consistency and virtually no garbage collection.</blockquote>
<p style="   ; ; ; ; ;  ">可翻译为：</p>
<blockquote style="   ; ; ; ; ;  ">与原生Java相比，这里性能提升的主要原因是100%的类型一致性以及几乎没有(自动的)垃圾回收机制。</blockquote>
<p style="   ; ; ; ; ;  "><strong>简而言之就是，asm.js的实现去掉大部分的自动GC机制，然后改成了强类型语言，编译器能够更大程度地进行优化，这才是asm.js能比普通JS运行更快的原因</strong>。在asm.js里不再支持除了浮点和整形之外的类型，内存的开辟和释放也需要代码手动进行处理。部分引擎甚至还可以以AOT或者JIT的形式运行asm.js。关于asm.js的原理，在微软的文档里也有一段更加详细的描述：</p>
<blockquote style="   ; ; ; ; ;  ">Asm.js is a strict subset of Java that can be used as a low-level, efficient target language for compilers. As a sublanguage, asm.js effectively describes a sandboxed virtual machine for memory-unsafe languages like C or C++. A combination of static and dynamic validation allows Java engines to employ techniques like type specialized compilation without bailouts and ahead-of-time (AOT) compilation for valid asm.js code. Such compilation techniques help Java execute at “predictable” and “near-native” performance, both of which are non-trivial in the world of compiler optimizations for dynamic languages like Java.</blockquote>
<p style="   ; ; ; ; ;  ">这段话从编译器优化的角度对asm.js原理描述地非常贴切了，比较难准确翻译，大概释义如下：</p>
<blockquote style="   ; ; ; ; ;  ">asm.js是Java的一个严格子集，是一种面向编译器的底层且高效的目标语言。作为一种子语言，asm.js高效地为类似C/C++这样的内存不安全语言描述了一个沙盒虚拟机。静态验证和动态验证的结合允许Java引擎对有效的asm.js代码使用型别特化编译和提前(AOT)编译等技术。这样的编译技术可以帮助Java具有"可预见性"和“接近原生”的性能表现，这两种特性在Java这样的动态语言编译器优化中是非常重要的。</blockquote>
<p style="   ; ; ; ; ;  ">其中"bailouts"应该是微软这个JS编译器里的专用名词，没有特别合适的翻译。"predictable"可理解为“更少的动态决议”。asm.js目前看已经是过时的技术，并非本文的重点也不再展开继续讨论，如果想继续了解Java编译优化的实现细节，读者可参阅文献的内容自行研读。</p>
<p style="   ; ; ; ; ;  ">第三章 WebAssembly：绕过JS 直接生成机器码</p>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8e7624f4-0218-11ee-843e-acde48001122.png"/></p>
<p style="   ; ; ; ; ;  ">3.1 WebAssembly是什么？</p>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8e8fef4c-0218-11ee-843e-acde48001122.png"/></p>
<p style="   ; ; ; ; ;  ">如上图所示，为了能便于程序员阅读和编辑 WebAssembly，源码除了被编译成二进制外还会生成一份文本文件。左边红色部分是C++源码，中间紫色部分是文本格式的.Wat文件的内容，右边蓝色部分是.wasm文件的内容。</p>
<p style="   ; ; ; ; ;  ">多数情况下，人们把Wasm定义成web上的编程语言，认为这是一个前端编程技术。其实这里有一些的误解，首先Wasm并不是一个新的"编程语言"，没有人会手写.wasm文件来进行编程。&nbsp;<strong>WebAssembly 有一套完整的语义，但作为开发者并不需要去了解它，开发者依然可以继续使用自己熟悉的编程语言，由各个语言的编译器将其编译成Wasm格式后运行在浏览器内置的Wasm虚拟机中</strong>，我认为Wasm更倾向于是一个应用在web场景中的编译领域新技术。其次，Wasm也并非只能运行在浏览器内，设计者对其抱有更加远大的宏图大业，这部分我们将在后面Wasm容器化这里继续展开讨论。</p>
<p style="   ; ; ; ; ;  ">Mozzila官方对WebAssembly的描述为：</p>
<blockquote style="   ; ; ; ; ;  ">WebAssembly is a new type of code that can be run in modern web browsers — it is a low-level assembly-like language with a compact binary format that runs with near-native performance and provides languages such as C/C++, C# and Rust with a compilation target so that they can run on the web. It is also designed to run alongside Java, allowing both to work together.</blockquote>
<p style="   ; ; ; ; ;  ">可翻译为：</p>
<blockquote style="   ; ; ; ; ;  ">WebAssembly是一种可以在现代浏览器中运行的新型代码——它是一种低级的类似汇编的语言，具有紧凑的二进制格式，运行起来具有接近原生的性能，其为C/C++、C#和Rust等语言提供了一个编译目标，以便它们可以在web上运行。它还被设计为与Java一起运行，允许两者一起工作。</blockquote>
<p style="   ; ; ; ; ;  ">通过这段描述已经可以对WebAssembly有一个初步认识，我们再进一步给它拆开来看：</p>
<ol><li style="   ; ; ; ; ;  ">首先，WebAssembly是一门新的编程语言，它于2019年12月5日正式成为与HTML、CSS以及Java 并列的web领域第四类编程语言。</li><li style="   ; ; ; ; ;  ">其次，WebAssembly是"汇编语言"而不是高级语言，&nbsp;<strong>程序员不直接编写WebAssembly代码，而是通过特殊的编译器将高级语言转换成WebAssembly代码</strong>。</li><li style="   ; ; ; ; ;  ">再次，&nbsp;<strong>WebAssembly是预处理过后的二进制格式，它实际是一个IR</strong>(Intermediate Representation)！类似Java的ByteCode或者.Net的MSIL/CIL。</li><li style="   ; ; ; ; ;  ">最后，WebAssembly是web上的语言，这意味着主流的浏览器可以读取并且执行它。</li></ol>
<p style="   ; ; ; ; ;  ">最后简单总结，程序员依然还是编写高级语言，然后通过“特殊的编译器”生成WebAssembly二进制代码，最终WebAssembly代码再被一个嵌入在浏览器里的"特殊的虚拟机"执行。这就是WebAssembly的全部工作过程。</p>
<p style="   ; ; ; ; ;  ">3.2 为什么需要WebAssembly？</p>
<p style="   ; ; ; ; ;  ">在web领域，我们已经有了Java这样利器，但美中不足的是Java的性能不佳，即使可以通过第二章里提到的各种编译优化来解决一部分问题，但在类似图形图像处理、3D游戏、AR、VR这些高性能应用的场景下，我们似乎任然需要一个更好的选择。</p>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8eade09c-0218-11ee-843e-acde48001122.png"/></p>
<p style="   ; ; ; ; ;  ">“&nbsp;<strong>快”是相对的，目前我们可以认为在运行速度上：原生C/C++代码 &gt; WebAssembly &gt; asm.js &gt; 原生Java</strong>。其中WebAssembly比asm.js要快的原因在于：</p>
<ol><li style="   ; ; ; ; ;  ">WebAssembly 体积更小，Java 通过gzip压缩后已经可以节约很大一部分空间，但WebAssembly 的二进制格式在被精心设计之后可以比gzip压缩后的Java 代码&nbsp;<strong>小10-20%左右</strong>。</li><li style="   ; ; ; ; ;  ">WebAssembly 解析更快，WebAssembly 解析速度比 Java&nbsp;<strong>快了一个数量级</strong>，这也是得益于其二进制的格式。除此之外，WebAssembly还可以在多核CPU上进行并行解析。</li><li style="   ; ; ; ; ;  ">WebAssembly 可以更好利用CPU特性，之前我们说到asm.js可以通过各种“奇技淫巧”来编译优化，但其还是受限于Java的实现。而WebAssembly可以完全自由发挥，使得其可以利用更多CPU特性，其中例如：64位整数、加载/存储偏移量以及各种CPU指令。在这一部分，WebAssembly能比asm.js&nbsp;<strong>平均提速5%左右</strong>。</li><li style="   ; ; ; ; ;  ">编译工具链的优化，WebAssembly的运行效率同时取决于两部分，第一个是生成代码的编译器，第二个是运行它的虚拟机。WebAssembly对其编译器进行了更多的优化，使用Binaryen编译器代替了Emen，&nbsp;<strong>这部分所带来的的速度提升大约在5%-7%。</strong></li></ol>
<p style="   ; ; ; ; ;  ">当然，速度上的提升并不是全部。WebAssembly的意义在于开辟了一个新的标准，不再拘泥于Java而是直接面向跟底层的机器码。用任何语言都可以开发WebAssembly，而WebAssembly又可以高效运行在任何环境下，这也是Mozilla的程序员对WebAssembly抱有的最远大的宏图大业。文章将在第六章对WebAssembly在非web端的应用继续展开讨论。</p>
<p style="   ; ; ; ; ;  ">3.3 WebAssembly与Java运行性能详细对比</p>
<p style="   ; ; ; ; ;  ">关于WebAssembly的性能，整体上我认为可以描述为“很快，但是不够快”。也就是说，&nbsp;<strong>我们期望它比Java快非常多，快个10倍或者8倍，但实际上只能快一点点，大概也就是不到2倍左右</strong>，而且在不同的测试场景下差异可能会很大。也许你会说100%的性能提升已经很高了，但实际上这也许不能说服大量开发人员完全转向一个崭新的有学习成本的技术。</p>
<p style="   ; ; ; ; ;  ">Zaplib(一个高性能web框架)的工程师从最大性能和标准性能两方面对WebAssembly与Java性能进行更详细的对比，结论如下：</p>
<p style="   ; ; ; ; ;  "><strong>3.3.1 最大性能(尽可能"奇技淫巧"地使用JS)</strong></p>
<p style="   ; ; ; ; ;  ">在最大性能上，特殊编写的原生JS是可以跟Wasm大致持平的。其原因在于JS可以通过ArrayBuffer来模拟成一个"memory managed language"：</p>
<ol><li style="   ; ; ; ; ;  ">可以尽可能避免掉自动GC的额外开销。</li><li style="   ; ; ; ; ;  ">可以对数据的局部性(cache locality)进行优化来提升缓存命中，从而提升数据读写的效率。(&nbsp;<strong>缓存局部性对数组的性能很重要！</strong>)</li><li style="   ; ; ; ; ;  ">当你尽可能避免掉其它开销，只使用循环、局部变量、算术、函数调用的时候，原生JS会非常快。</li></ol>
<p style="   ; ; ; ; ;  ">举个例子如下，这是一个计算多个2维向量平均长度的TS函数</p>
<p style="   ; ; ; ; ;  ">// Unoptimized Typetype Vec2 = { x: number, y: number };function avgLen(vecs: Vec2[]): number { let total = 0; for (const vec of vecs) { total += Math.sqrt(vec.x*vec.x + vec.y*vec.y); } return total / vecs.length;a}</p>
<p style="   ; ; ; ; ;  ">这是使用了ArrayBuffer替换数组了实现：</p>
<p style="   ; ; ; ; ;  ">// Optimized Type, using ArrayBuffersfunction avgLen(vecs: ArrayBuffer): number { let total = 0; const float64 = new Float64Array(vecs); for (let i=0; i</p>
<p style="   ; ; ; ; ;  ">在示例中，ArrayBuffer每16位存储一个二维向量，前8位是向量x，后8位是向量y。后者代码的性能会远高于前者，具体细节有兴趣可以参考( <a href="https://zaplib.com/docs/blog_ts" rel="noopener noreferrer" target="_blank">https://zaplib.com/docs/blog_ts</a> ++.html)。总而言之就是，可以通过JS的ArrayBuffer来手动管理JS内存，尽量避免掉性能开销大的地方，剩下的普通指令的执行跟Wasm并无本质差异。除此之外，浏览器里的JS相比Wasm在某些方面甚至还具有优势：</p>
<ol><li style="   ; ; ; ; ;  ">JS可以访问一些零拷贝(zero-copy)的方法。例如&nbsp;TextEncoder和&nbsp;FileReader.readAsArrayBuffer，而Wasm还需要额外再进行一次内存拷贝。</li></ol>
<p style="   ; ; ; ; ;  ">而Wasm相比JS的优势在于：</p>
<ol><li style="   ; ; ; ; ;  ">SIMD加速。SIMD.js的API已经被弃用，取而代之的是Wasm的SIMD实现。</li><li style="   ; ; ; ; ;  ">前置的编译优化。</li></ol>
<p style="   ; ; ; ; ;  "><strong>3.3.2 标准性能(正常使用编程语言)</strong></p>
<p style="   ; ; ; ; ;  ">对于实际情况而言，用标准的JS的进行性能对比才是有意义的，原因在于：</p>
<ol><li style="   ; ; ; ; ;  ">代码的编写复杂度和可维护性也是很重要的，"奇技淫巧"并不适合生产工作中使用。</li><li style="   ; ; ; ; ;  ">代码工程会依赖大量第三方库，这些库大概率都是标准JS来编写的。</li></ol>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8ef0efea-0218-11ee-843e-acde48001122.gif"/></p>
<p style="   ; ; ; ; ;  ">如上图，这个3D人物动画是一个经典的CPU计算密集的测试用例，且可以直观感受到性能在帧数上的表现( <a href="http://aws-website-webassemblyskeletalanimation-ffaza.s3-website-us-east-1.amazonaws.com/" rel="noopener noreferrer" target="_blank">http://aws-website-webassemblyskeletalanimation-ffaza.s3-website-us-east-1.amazonaws.com/</a>)。感兴趣的同学可以在自己浏览器里尝试一下，当3D人物数量为100时JS版本会有明显卡顿，切换到Wasm则不会有卡顿感。</p>
<p style="   ; ; ; ; ;  "><img src="https://image.wxopen.club/content_8f0f5610-0218-11ee-843e-acde48001122.png"/></p>
<p style="   ; ; ; ; ;  ">这是在17年Wasm诞生之初的测试，可以看到在不同的环境下Wasm比标准JS快了8-15倍。随着JS的不断优化，现在再去测试可能就不会有这么大的差异了。更重要的是，这个测试用例不一定能代表真实的web应用，&nbsp;<strong>真正的web应用可能不会命中这么多"优化项"，8倍以上的性能差异往往只存在于测试用例中。这里我必须再重复一下就是，Wasm快10%到1000%都有可能，不同的测试环境下不可一概而论。</strong></p>
<p style="   ; ; ; ; ;  ">3.4 如何正确使用WebAssembly？</p>
<p style="   ; ; ; ; ;  ">首先需要再次强调的是&nbsp;<strong>，WebAssembly的诞生并不是要取代Java，web端整个主框架还是HTML+JS+CSS这一套。web应用的大部分基础功能也依然是靠Java来实现，我们只是将web应用中对性能有较高要求的模块替换为wasm实现。</strong>在这样的场景下，正确使用WebAssembly的步骤为&nbsp;<strong>：</strong><a href="https://www.sohu.com/?strategyid=00001&amp;spm=smpc.content.content.2.1683703919261BntQu9h" rel="noopener noreferrer" style="color: rgb(83, 159, 243); font-size: 15px;" target="_blank">返回搜狐，查看更多</a></p>
<ol><li style="   ; ; ; ; ;  "><strong>整理web应用中所有模块，梳理出有性能瓶颈的地方。</strong>例如你的web应用里有视频上传、文件对比、视频编解码、游戏等模块，这些都是很适合用WebAssembly来实现的。相反，基础的网页交互功能并不适合用WebAssembly来实现。</li><li style="   ; ; ; ; ;  "><strong>进行简单的demo性能测试</strong>，看是否能达到预期的加速效果。如果加速效果并不明显，那么就不适合切换到Wasm。</li><li style="   ; ; ; ; ;  "><strong>确定用来编译成WebAssembly的源语言，</strong>目前主流的语言基本都是支持WebAssembly的，唯一不同的区别是其编译器的优化程度。如果你使用过C++、RUST，最好还是用这两种语言来编写，其编译优化程度会更高。当然了如果你想使用PHP/GO/JS/Python这些你更加熟悉的语言的话，也是不错的选择，毕竟有时候开发效率会比运行效率要更加重要。</li><li style="   ; ; ; ; ;  "><strong>编码实现，然后导出.wasm文件。</strong>这一步基本没什么难度，确定了语言之后使用对应的编译器即可，需要注意的是记得尽量多打开debug选项，不然有运行时报错的话你就只能对着一堆二进制代码懵逼了。</li><li style="   ; ; ; ; ;  "><strong>编写Java胶水代码，加载.wasm模块。</strong>在最小可行版本的实现中&nbsp;<strong>，在 Web 上访问 WebAssembly 的唯一方法是通过显式的Java API调用，而在ES6标准中，WebAssembly 也可以直接从</strong></li></ol>
<p><span style="font-size: 16px; color: rgb(25, 25, 25);">作者：yannduan，腾讯IEG客户端开发工程师</span></p>
</div>]]></description>
      <author>xiahan</author>
      <pubDate>Wed, 31 May 2023 18:04:20 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[NfcA 连接扇区写入,读取写入验证密钥指令说明]]></title>
      <link>https://wxopen.club/topic/647b49be4cdb06243e5a8521</link>
      <guid>https://wxopen.club/topic/647b49be4cdb06243e5a8521</guid>
      <description><![CDATA[<div class="markdown-text"><h2>说明</h2>
<p>带有密钥验证的卡,必读每次在读 或者写时都要先验证在读写, 不然就会失败</p>
<h2>指令</h2>
<h3>通常的是 指令(1字节)+要操作的块(1字节) + 14个内容字节</h3>
<h3>扇区: 小程序没有扇区的概念因为NFC块都是连续的, 所以一般卡16个扇区, 每个扇区4个块, 对于小程序来说就是 0~63 块共计64块</h3>
<p>例如 :<br>
1扇区 第0块 小程序对应的就是第0块<br>
2扇区 第3块 小程序对应的就是第8块 以此类推</p>
<ul>
<li></li>
</ul>
<pre class="prettyprint"><code>验证指令: 0x60  
\[0x60\]+要操作的块\[0x01\]+卡的ID\[0xde, 0x63, 0x35, 0x9c,\]+秘钥\[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\]



写入或读取不同的块 要验证不同的块, 比如读取 0x01 块 要操作的块就要写\[0x01\]  
当要要操作 16扇区第3块时, 小程序的要操作的块就要写\[0x3f\]十进制63
</code></pre><ul>
<li></li>
</ul>
<pre class="prettyprint"><code>读取指令: 0x30  
\[0x30,0x01\] : 读取第0个扇区第二块,
</code></pre><ul>
<li></li>
</ul>
<pre class="prettyprint"><code>写入指令: 0xa0  
\[0xa0,0x09,0xff, 0xff, 0xff, 0xff, 0xff, 0xff\] : 在第9块写入 6个字节的数据  
我的这个卡写入时必须要组合成 18个字节才能写入, 少于或多都会写入失败  
\[指令(0xa0),块号(0x09),…16个字节\].length = 18, 内容不够的填充FF或者填充其他的内容, 数组必须凑够18个元素
</code></pre><p>例如:</p>
<pre class="hljs"><code><span class="hljs-keyword">const</span> params = {
		<span class="hljs-attr">cmd</span>: <span class="hljs-number">0x60</span>, <span class="hljs-comment">// 验证指令</span>
		<span class="hljs-attr">block</span>: <span class="hljs-number">0x01</span>, <span class="hljs-comment">// 块</span>
		<span class="hljs-attr">cardId</span>: [<span class="hljs-number">0xde</span>, <span class="hljs-number">0x63</span>, <span class="hljs-number">0x35</span>, <span class="hljs-number">0x9c</span>], <span class="hljs-comment">// 卡片id 获取从 NFCAdapter.onDiscovered((res)=&gt;{ // res中含有卡片id });</span>
		<span class="hljs-attr">key</span>: [<span class="hljs-number">0xff</span>, <span class="hljs-number">0xff</span>, <span class="hljs-number">0xff</span>, <span class="hljs-number">0xff</span>, <span class="hljs-number">0xff</span>, <span class="hljs-number">0xff</span>], <span class="hljs-comment">// 验证密钥</span>
	};
	<span class="hljs-keyword">const</span> arr = [params.cmd, params.block, ...params.cardId, ...params.key];
	<span class="hljs-keyword">const</span> writeBuffer = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Uint8Array</span>(arr).buffer;

	<span class="hljs-keyword">const</span> NFCAdapter = wx.getNFCAdapter();
	<span class="hljs-keyword">const</span> NFCType = NFCAdapter.getNfcA();

	<span class="hljs-comment">// 验证密钥</span>
	NFCType.transceive({
		<span class="hljs-attr">data</span>: writeBuffer,
		<span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{
			<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"解密成功, 接收数据如下:"</span>, res);
			<span class="hljs-comment">// 开始读写</span>
		},
		<span class="hljs-attr">fail</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">err</span>) </span>{
			<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"解密失败"</span>, err);
			log.push(<span class="hljs-string">"解密失败"</span> + checkErr(err));
		},
	});

</code></pre></div>]]></description>
      <author>gzou</author>
      <pubDate>Wed, 31 May 2023 15:42:21 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[小程序页面加水印，防止用户截图分享隐私数据]]></title>
      <link>https://wxopen.club/topic/647b4c014cdb06243e5a86dd</link>
      <guid>https://wxopen.club/topic/647b4c014cdb06243e5a86dd</guid>
      <description><![CDATA[<div class="markdown-text"><pre class="prettyprint"><code>为了防止用户将小程序内的隐私数据进行截图或者录屏分享导致信息泄露，我们会在小程序全局添加一个水印浮层。这样即使被截图或者拍照，也能轻松地确定泄露的源头。
</code></pre><p>小程序防止用户截屏的方法有很多，其中一种常见的方法就是在小程序的页面中添加水印。具体实现方法如下：</p>
<ol>
<li>在小程序中的页面中添加水印浮层，一般通过绝对定位来实现，这样可以使水印在页面的最上层，无法被其他元素覆盖。</li>
<li>设计水印的样式和位置，通常可以在小程序的样式文件中设置，例如设置水印的位置为右下角，样式为半透明的字体，以免影响正常的内容展示。</li>
<li>对于不同类型的页面，可以根据需要添加不同的水印，例如在敏感信息页面添加比较醒目的水印，而在其他普通页面只添加轻微的水印。</li>
<li>如果需要防止用户截屏或者拍照，可以在小程序中添加截屏监听事件，并在用户进行截屏或者拍照操作时，自动添加水印。</li>
</ol>
<p>总的来说，小程序防止用户截屏的方法还有很多，例如使用安全键盘等，但是添加水印仍然是最为常见的一种方法。通过添加水印，可以有效地防止用户截屏和分享敏感信息，保护用户和单位的信息安全。</p>
<p>下面是一个简单的示例，position选择固定定位fixed，固定定位会固定在浏览器窗口某个位置，不会随滚动条滚动。用z-index将元素的层级设置为最低，将view旋转45度，效果就出来啦</p>
<img src="https://image.wxopen.club/content_b0af9126-0219-11ee-843e-acde48001122.png" style="height: auto;" width="478px"/>
<pre class="ql-syntax" spellcheck="false">&lt;view style=<span class="hljs-string">"position: fixed;top: -10vh; left:-100vw;width: 250vw; height: 100vh; z-index: -999;transform: rotate(-45deg);"</span>&gt;
  &lt;block wx:<span class="hljs-keyword">for</span>=<span class="hljs-string">"{{30}}"</span> wx:key=<span class="hljs-string">"index"</span> wx:<span class="hljs-keyword">if</span>=<span class="hljs-string">"{{userInfo}}"</span>&gt;
    &lt;view style=<span class="hljs-string">"color:gray; margin:30rpx; padding:20rpx; opacity: 0.15;"</span>&gt;
    {{userInfo.user_name + <span class="hljs-string">'　　'</span> + userInfo.user_phone}}　　　　　　{{userInfo.user_name + <span class="hljs-string">'　　'</span> + userInfo.user_phone}}　　　　　{{userInfo.user_name + <span class="hljs-string">'　　'</span> + userInfo.user_phone}}　　　　{{userInfo.user_name + <span class="hljs-string">'　　'</span> + userInfo.user_phone}}
    &lt;/view&gt;
  &lt;/block&gt;
&lt;/view&gt;
</pre></div>]]></description>
      <author>rduan</author>
      <pubDate>Wed, 31 May 2023 12:05:01 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[下单助手创建的小程序搜索到，但是点进去确实另一个分店的。]]></title>
      <link>https://wxopen.club/topic/647b49c14cdb06243e5a8523</link>
      <guid>https://wxopen.club/topic/647b49c14cdb06243e5a8523</guid>
      <description><![CDATA[<div class="markdown-text"><p>看图</p>
<img src="https://image.wxopen.club/content_58aefad0-0218-11ee-843e-acde48001122.jpg" style="height: auto;"/>
<p><img src="https://image.wxopen.club/content_58bfdbe8-0218-11ee-843e-acde48001122.jpg" alt=""><img src="https://image.wxopen.club/content_58f203de-0218-11ee-843e-acde48001122.jpg" alt=""><img src="https://image.wxopen.club/content_59187334-0218-11ee-843e-acde48001122.jpg" alt=""></p>
<p>真的是搜索不到。以前可以的。不知道什么原因。大神们解答下</p>
<p><span style="font-size: 16px;">真的是搜索不到。以前可以的。不知道什么原因。大神们解答下</span></p>
<p><span style="font-size: 16px;">真的是搜索不到。以前可以的。不知道什么原因。大神们解答下</span></p>
<p><span style="font-size: 16px;">真的是搜索不到。以前可以的。不知道什么原因。大神们解答下</span></p>
<p><span style="font-size: 16px;">真的是搜索不到。以前可以的。不知道什么原因。大神们解答下</span></p>
<p><span style="font-size: 16px;">真的是搜索不到。以前可以的。不知道什么原因。大神们解答下</span></p>
<p><span style="font-size: 16px;">真的是搜索不到。以前可以的。不知道什么原因。大神们解答下</span></p>
<p><span style="font-size: 16px;">真的是搜索不到。以前可以的。不知道什么原因。大神们解答下</span></p>
</div>]]></description>
      <author>guiying81</author>
      <pubDate>Wed, 31 May 2023 06:05:48 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[申请小程序长期订阅消息模板]]></title>
      <link>https://wxopen.club/topic/647b4a884cdb06243e5a85d4</link>
      <guid>https://wxopen.club/topic/647b4a884cdb06243e5a85d4</guid>
      <description><![CDATA[<div class="markdown-text"><p style="font-size: 16px;">【小程序appid】wxdbb1173cb13dc02b</p>
<p style="font-size: 16px;">【小程序主体】&nbsp;江苏互蓝环保科技有限公司</p>
<p style="font-size: 16px;">【申请模板类目】<span style="color: rgb(53, 53, 53); font-size: 14px;">商业服务&nbsp;&nbsp;&gt;&nbsp;&nbsp;环保回收/废品回收</span></p>
<p style="font-size: 16px;">【申请模板名称】<span style="font-size: 16px;">&nbsp;通知提醒</span></p>
<p style="font-size: 16px;">【使用场景】用户及时收到环保材料的交易成功通知</p>
<p style="font-size: 16px;">【模板字段】回收端用户，时间，价格，地址</p>
<p style="font-size: 16px;">【消息示例】</p>
<p style="font-size: 16px;"><span style="font-size: 16px;">回收端用户</span>：张三三</p>
<p style="font-size: 16px;"><span style="font-size: 16px;">时间</span>：2023.4.20.11.16</p>
<p style="font-size: 16px;"><span style="font-size: 16px;">价格</span>：799</p>
<p><span style="font-size: 16px;">地址：河南省-郑州市-中原区</span></p>
</div>]]></description>
      <author>xiulan86</author>
      <pubDate>Tue, 30 May 2023 22:28:50 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[公众号搜索不到]]></title>
      <link>https://wxopen.club/topic/647b4be44cdb06243e5a86c3</link>
      <guid>https://wxopen.club/topic/647b4be44cdb06243e5a86c3</guid>
      <description><![CDATA[<div class="markdown-text"><p>名称：<span style="font-size: 14px; color: rgb(53, 53, 53);">飞飞的心里话    ID: </span>gh_c9657d8f1ad2</p>
<p>突然就搜索不到了 后台无任何违规记录 账号也认证过了 麻烦官方帮忙处理下</p>
<p><img src="https://image.wxopen.club/content_9f05105e-0219-11ee-843e-acde48001122.png" alt=""></p>
<p>名称：<span style="color: rgb(53, 53, 53); font-size: 14px;">飞飞的心里话    ID: </span>gh_c9657d8f1ad2</p>
<p><img src="https://image.wxopen.club/content_9f05105e-0219-11ee-843e-acde48001122.png" alt=""></p>
<p style="font-size: 14px;"><br/></p>
</div>]]></description>
      <author>lei47</author>
      <pubDate>Tue, 30 May 2023 19:38:10 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[4步成功在微信云托管成功部署 egg.js 项目]]></title>
      <link>https://wxopen.club/topic/647b4ac74cdb06243e5a85fc</link>
      <guid>https://wxopen.club/topic/647b4ac74cdb06243e5a85fc</guid>
      <description><![CDATA[<div class="markdown-text"><p>由于微信云托管快速部署没有 egg.js 模板，所以只能自己创建服务。</p>
<img src="https://image.wxopen.club/content_f4b31542-0218-11ee-843e-acde48001122.png" style="height: auto;" width="476px"/>
<p><strong>1.创建服务</strong></p>
<img src="https://image.wxopen.club/content_f4c2d306-0218-11ee-843e-acde48001122.png" width="446px"/>
<p></p>
<img src="https://image.wxopen.club/content_f4d2f2ae-0218-11ee-843e-acde48001122.png" style="height: auto;" width="450px"/>
<img src="https://image.wxopen.club/content_f4e42510-0218-11ee-843e-acde48001122.png" style="height: auto;" width="452px"/>
<p><strong>2.在项目根目录创建 Dockerfile 文件，注意没有后缀名：</strong></p>
<img src="https://image.wxopen.club/content_f4f9b1f0-0218-11ee-843e-acde48001122.png" style="height: auto;" width="454px"/>
<p><strong>3.配置 egg.js 项目</strong></p>
<p>3.1修改 package.json，删除 --daemon 参数</p>
<img src="https://image.wxopen.club/content_f51145e0-0218-11ee-843e-acde48001122.png" style="height: auto;" width="422px"/>
<p>3.2在 config.default.js 中新增监听配置：</p>
<img src="https://image.wxopen.club/content_f520f2e2-0218-11ee-843e-acde48001122.png" style="height: auto;" width="315px"/>
<p>划重点：hostname，一定设置为 0.0.0.0</p>
<p><strong>4.打包根目录除node_modules以外的目录为zip。</strong></p>
<p>最后：选择，上传，发布。一定会成功！</p>
<img src="https://image.wxopen.club/content_f52c3c74-0218-11ee-843e-acde48001122.png" style="height: auto;" width="290px"/>
</div>]]></description>
      <author>naxiang</author>
      <pubDate>Tue, 30 May 2023 18:31:34 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[直播预约可领券使用方法]]></title>
      <link>https://wxopen.club/topic/647b4ac74cdb06243e5a85fd</link>
      <guid>https://wxopen.club/topic/647b4ac74cdb06243e5a85fd</guid>
      <description><![CDATA[<div class="markdown-text"><p>【产品功能-直播预约可领券使用方法】</p>
<p>学习如何在创建直播预告时使用预约可领券功能</p>
<p>第一步：</p>
<p>进入手机端直播预告页面，打开【预约可领券】开关</p>
<p>第二步：</p>
<p>选择要关联的优惠券</p>
<p>第三步：</p>
<p>返回预告创建页面，【关联优惠券】显示已关联的优惠券</p>
<p>第四步：</p>
<p>查看已关联的商品 </p>
<p style="font-size: 16px; margin-bottom: 24px;"> 预约领券功能开放范围更新为：</p>
<p style="font-size: 16px; margin-bottom: 24px;">1、小店店主视频号可用。</p>
<p style="font-size: 16px; margin-bottom: 24px;">2、开放小店范围：官方旗舰店和旗舰店都可以使用，其他店铺类型评分&gt;=4.0分可使用。</p>
<p style="font-size: 16px; margin-bottom: 24px;">特殊说明：目前该功能仅支持手机端使用，PC端敬请期待</p>
<p style="font-size: 16px; margin-bottom: 24px;"><br/></p>
<p style="font-size: 16px; margin-bottom: 24px;">产品功能介绍：视频号“直播预约可领券”功能，是商家在创建直播预告时可以选择“预约可领券”这一选项，使用该功能后用户在预约后可领取一张商品的优惠券。该功能旨在提升商家预约直播的用户规模和转化效率。</p>
</div>]]></description>
      <author>jie44</author>
      <pubDate>Tue, 30 May 2023 16:42:49 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[微信小程序实时圆形进度条实现]]></title>
      <link>https://wxopen.club/topic/647b4b9f4cdb06243e5a8684</link>
      <guid>https://wxopen.club/topic/647b4b9f4cdb06243e5a8684</guid>
      <description><![CDATA[<div class="markdown-text"><pre class="ql-syntax" spellcheck="false"><span class="hljs-type">WXML</span>代码
&lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"wrap"</span>&gt;
  &lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"circleBox "</span>&gt;
    &lt;canvas <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"circle c1"</span> canvas-id=<span class="hljs-string">"canvasCircle"</span>&gt;
    &lt;/canvas&gt;
    &lt;canvas <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"circle c2"</span> canvas-id=<span class="hljs-string">"canvasArcCir"</span>&gt;
    &lt;/canvas&gt;
    &lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"drawBtn"</span> bindtap=<span class="hljs-string">"drawCircle"</span>&gt;开始动态绘制&lt;/view&gt;
  &lt;/view&gt;
&lt;/view&gt;

<span class="hljs-type">WXSS</span>代码
<span class="hljs-type">Page</span> {
  width: <span class="hljs-number">100</span>%;
  height: <span class="hljs-number">100</span>%;
  background-color: #fff;
}

.circleBox {
  text-align: center;
  margin-top: <span class="hljs-number">100</span>rpx;
}

.circle {
  position: absolute;
  left: <span class="hljs-number">0</span>;
  right: <span class="hljs-number">0</span>;
  margin: auto;
}

.c1 {
  z-index: <span class="hljs-number">-99</span>;
  width:<span class="hljs-number">300</span>rpx;
  height:<span class="hljs-number">300</span>rpx;
}
.c2 {
  width:<span class="hljs-number">300</span>rpx;
  height:<span class="hljs-number">300</span>rpx;
}

.drawBtn {
  width: <span class="hljs-number">70</span>rpx;
  position: absolute;
  top: <span class="hljs-number">60</span>rpx;
  right: <span class="hljs-number">0</span>;
  left: <span class="hljs-number">0</span>;
  margin: <span class="hljs-number">0</span> auto;
  border: <span class="hljs-number">1</span>px #<span class="hljs-number">000000</span> solid;
  border-radius: <span class="hljs-number">10</span>rpx;
}

js
<span class="hljs-comment">//获取应用实例</span>
<span class="hljs-keyword">var</span> app = getApp()
<span class="hljs-keyword">var</span> interval;
<span class="hljs-keyword">var</span> varName;
<span class="hljs-keyword">var</span> ctx = wx.createCanvasContext(<span class="hljs-symbol">'canvasArcCi</span>r');

<span class="hljs-type">Page</span>({
  data: {
  },
  onReady: function () {
    <span class="hljs-comment">//创建并返回绘图上下文context对象。</span>
    <span class="hljs-keyword">var</span> cc = wx.createCanvasContext(<span class="hljs-symbol">'canvasCircl</span>e');
    cc.setLineWidth(<span class="hljs-number">6</span>);
    cc.setStrokeStyle('#eaeaea');
    cc.setLineCap(<span class="hljs-symbol">'roun</span>d');
    cc.beginPath();
    cc.arc(<span class="hljs-number">100</span>, <span class="hljs-number">100</span>, <span class="hljs-number">96</span>, <span class="hljs-number">0</span>, <span class="hljs-number">2</span> * <span class="hljs-type">Math</span>.<span class="hljs-type">PI</span>, <span class="hljs-literal">false</span>);
    cc.stroke();
    cc.draw();
  },
  onLoad: function (options) {

  }
  drawCircle: function () {
    clearInterval(varName);
    function drawArc(s, e) {
      ctx.setFillStyle(<span class="hljs-symbol">'whit</span>e');
      ctx.clearRect(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">200</span>, <span class="hljs-number">200</span>);
      ctx.draw();
      <span class="hljs-keyword">var</span> x = <span class="hljs-number">100</span>, y = <span class="hljs-number">100</span>, radius = <span class="hljs-number">96</span>;
      ctx.setLineWidth(<span class="hljs-number">5</span>);
      ctx.setStrokeStyle('#d81e06');
      ctx.setLineCap(<span class="hljs-symbol">'roun</span>d');
      ctx.beginPath();
      ctx.arc(x, y, radius, s, e, <span class="hljs-literal">false</span>);
      ctx.stroke()
      ctx.draw()
    }
    <span class="hljs-keyword">var</span> step = <span class="hljs-number">1</span>, startAngle = <span class="hljs-number">1.5</span> * <span class="hljs-type">Math</span>.<span class="hljs-type">PI</span>, endAngle = <span class="hljs-number">0</span>;
    <span class="hljs-keyword">var</span> animation_interval = <span class="hljs-number">1000</span>, n = <span class="hljs-number">60</span>;
    <span class="hljs-keyword">var</span> animation = function () {
      <span class="hljs-keyword">if</span> (step &lt;= n) {
        endAngle = step * <span class="hljs-number">2</span> * <span class="hljs-type">Math</span>.<span class="hljs-type">PI</span> / n + <span class="hljs-number">1.5</span> * <span class="hljs-type">Math</span>.<span class="hljs-type">PI</span>;
        drawArc(startAngle, endAngle);
        step++;
      } <span class="hljs-keyword">else</span> {
        clearInterval(varName);
      }
    };
    varName = setInterval(animation, animation_interval);
  },
})
</pre>
</div>]]></description>
      <author>uqiu</author>
      <pubDate>Tue, 30 May 2023 15:19:36 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[答题积分小程序云开发实战-界面交互篇：个人中心页布局样式与逻辑交互开发]]></title>
      <link>https://wxopen.club/topic/647b4a4e4cdb06243e5a859f</link>
      <guid>https://wxopen.club/topic/647b4a4e4cdb06243e5a859f</guid>
      <description><![CDATA[<div class="markdown-text"><h1 style="text-align: justify;">微信小程序云开发实战系列-答题积分赛小程序</h1>
<h1 style="text-align: justify;">界面交互篇：个人中心页布局样式与逻辑交互开发</h1>
<h1 style="text-align: justify;">个人中心页效果图</h1>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_ac8af06e-0218-11ee-843e-acde48001122.png"/></p>
<h1 style="text-align: justify;">个人中心布局与样式实现</h1>
<h1 style="text-align: justify;">页头布局</h1>
<p style="text-align: justify;">在my.wxml中，编写布局代码：</p>
<pre class="ql-syntax" spellcheck="false" style="background-color: rgb(250, 250, 250); margin-top: 20px; font-size: 18px; margin-bottom: 20px;">&lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">'UCenter-bg'</span>&gt;
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"margin-bottom"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"cu-avatar xl round"</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">image</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"avatar"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/images/0.png"</span> <span class="hljs-attr">mode</span>=<span class="hljs-string">"widthFix"</span>&gt;&lt;/<span class="hljs-name">image</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'text-xl'</span>&gt;</span>
&nbsp; &nbsp; &nbsp; 姑苏洛言
&nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'margin-top-sm'</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"cu-tag bg-yellow"</span>&gt;</span>积分：100<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
&nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
</pre>
<h1 style="text-align: justify;">微页头样式</h1>
<p style="text-align: justify;">在my.wxss中，编写样式代码：</p>
<pre class="ql-syntax" spellcheck="false" style="color: rgb(34, 34, 34); background-color: rgb(250, 250, 250); margin-top: 20px; font-size: 18px; margin-bottom: 20px;">.UCenter-bg {
      <span class="hljs-attribute">background</span>: <span class="hljs-built_in">url</span>(https://tc.meng.cn/index1.jpg?sign=<span class="hljs-number">8</span>f9ea11ad30c0607c60d16d4fab4368d&amp;t=<span class="hljs-number">1677080243</span>) center center no-repeat;
      <span class="hljs-attribute">background-size</span>: cover;
      <span class="hljs-attribute">height</span>: <span class="hljs-number">350</span>rpx;
      <span class="hljs-attribute">display</span>: flex;
      <span class="hljs-attribute">justify-content</span>: center;
      <span class="hljs-attribute">padding-top</span>: <span class="hljs-number">10</span>rpx;
      <span class="hljs-attribute">overflow</span>: hidden;
      <span class="hljs-attribute">position</span>: relative;
      <span class="hljs-attribute">flex-direction</span>: column;
      <span class="hljs-attribute">align-items</span>: center;
      <span class="hljs-attribute">color</span>: <span class="hljs-number">#fff</span>;
      <span class="hljs-attribute">font-weight</span>: <span class="hljs-number">300</span>;
      <span class="hljs-attribute">text-shadow</span>: <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">3px</span> <span class="hljs-built_in">rgba</span>(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0.3</span>);
}
 
.UCenter-bg text {
  		<span class="hljs-attribute">border-radius</span>: <span class="hljs-number">6</span>rpx;
}
 
.UCenter-bg image {
      <span class="hljs-attribute">width</span>: <span class="hljs-number">200</span>rpx;
      <span class="hljs-attribute">height</span>: <span class="hljs-number">200</span>rpx;
}
 
.UCenter-bg .gif-wave{
      <span class="hljs-attribute">position</span>: absolute;
      <span class="hljs-attribute">width</span>: <span class="hljs-number">100%</span>;
      <span class="hljs-attribute">bottom</span>: <span class="hljs-number">0</span>;
      <span class="hljs-attribute">left</span>: <span class="hljs-number">0</span>;
      <span class="hljs-attribute">z-index</span>: <span class="hljs-number">99</span>;
      <span class="hljs-attribute">mix-blend-mode</span>: screen;  
      <span class="hljs-attribute">height</span>: <span class="hljs-number">100</span>rpx;   
}
</pre>
<h1 style="text-align: justify;">保存预览</h1>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_ac9dffb0-0218-11ee-843e-acde48001122.png"/></p>
<h1 style="text-align: justify;">页面链接</h1>
<p style="text-align: justify;">这里我使用了导航组件navigator，实现跳转到修改资料页面和关于程序页面。</p>
<p style="text-align: justify;">在my.wxml中，编写代码：</p>
<pre class="ql-syntax" spellcheck="false" style="background-color: rgb(250, 250, 250); margin-top: 20px; font-size: 18px; margin-bottom: 20px;">&lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"cu-item arrow"</span>&gt;
&nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">navigator</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'content'</span> <span class="hljs-attr">url</span>=<span class="hljs-string">'../login/login?type=edit'</span> <span class="hljs-attr">hover-class</span>=<span class="hljs-string">'none'</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'icon-formfill text-sky'</span>&gt;&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'text-grey'</span>&gt;</span>修改资料<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">navigator</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
&nbsp;
<span class="hljs-tag">&lt;<span class="hljs-name">view</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"cu-item arrow"</span>&gt;</span>
&nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">navigator</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'content'</span> <span class="hljs-attr">url</span>=<span class="hljs-string">'../about/about'</span> <span class="hljs-attr">hover-class</span>=<span class="hljs-string">'none'</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'icon-creativefill text-sky'</span>&gt;&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; &nbsp; <span class="hljs-tag">&lt;<span class="hljs-name">text</span> <span class="hljs-attr">class</span>=<span class="hljs-string">'text-grey'</span>&gt;</span>关于程序<span class="hljs-tag">&lt;/<span class="hljs-name">text</span>&gt;</span>
&nbsp; <span class="hljs-tag">&lt;/<span class="hljs-name">navigator</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">view</span>&gt;</span>
</pre>
<h1 style="text-align: justify;">页面内发起转发</h1>
<p style="text-align: justify;">通过给 button 组件设置属性 open-type="share"，可以在用户点击按钮后触发 Page.onShareAppMessage 事件。</p>
<p style="text-align: justify;">在my.wxml中，编写代码：</p>
<pre class="ql-syntax" spellcheck="false" style="background-color: rgb(250, 250, 250); margin-top: 20px; font-size: 18px; margin-bottom: 20px;">&lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"cu-item arrow"</span>&gt;
&nbsp; &lt;button <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-symbol">'cu</span>-btn content' open-<span class="hljs-class"><span class="hljs-keyword">type</span></span>=<span class="hljs-symbol">'shar</span>e'&gt;
&nbsp; &nbsp; &lt;text <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-symbol">'icon</span>-appreciatefill text-sky'&gt;&lt;/text&gt;
&nbsp; &nbsp; &lt;text <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-symbol">'text</span>-grey'&gt;好用分享&lt;/text&gt;
&nbsp; &lt;/button&gt;
&lt;/view&gt;
</pre>
<p style="text-align: justify;">在my.js中，编写代码：</p>
<pre class="ql-syntax" spellcheck="false" style="color: rgb(34, 34, 34); background-color: rgb(250, 250, 250); margin-top: 20px; font-size: 18px; margin-bottom: 20px;"><span class="hljs-function"><span class="hljs-title">onShareAppMessage</span><span class="hljs-params">()</span></span> {
    return {
      title: <span class="hljs-string">'@你，快来「护网专题信息安全知识竞答」，答题赢积分吧~'</span>
    }
}
</pre>
<p style="text-align: justify;">转发分享演示图</p>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_acb0e4ea-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify;"><br/></p>
<h1 style="text-align: justify;">添加客服人员</h1>
<p style="text-align: justify;">在【客服】，添加客服；</p>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_acc4a304-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_acd8d5b8-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify;"><br/></p>
<p style="text-align: justify;">绑定客服人员</p>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_acea7c1e-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify;"><br/></p>
<p style="text-align: justify;">绑定后的客服帐号，可以登录 【网页端客服】 或 【移动端小程序客服】 进行客服沟通。我一般使用移动端小程序客服，比较方便。</p>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_acfff008-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify;"><br/></p>
<h1 style="text-align: justify;">打开客服会话</h1>
<p style="text-align: justify;">在页面使用客服消息，需要将 button 组件 open-type 的值设置为 contact，当用户点击后就会进入客服会话。</p>
<p style="text-align: justify;">在my.wxml中，编写代码：</p>
<pre class="ql-syntax" spellcheck="false" style="background-color: rgb(250, 250, 250); margin-top: 20px; font-size: 18px; margin-bottom: 20px;">&lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"cu-item arrow"</span>&gt;
&nbsp; &lt;button <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-symbol">'cu</span>-btn content' open-<span class="hljs-class"><span class="hljs-keyword">type</span></span>=<span class="hljs-symbol">'contac</span>t'&gt;
&nbsp; &nbsp; &lt;text <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-symbol">'icon</span>-servicefill text-sky'&gt;&lt;/text&gt;
&nbsp; &nbsp; &lt;text <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-symbol">'text</span>-grey'&gt;联系客服&lt;/text&gt;
&nbsp; &lt;/button&gt;
&lt;/view&gt;
</pre>
<p style="text-align: justify;">用户咨询</p>
<p style="text-align: justify;">在小程序客户端，点击【联系客服】按钮，进入即时聊天会话界面，与客服发起即时聊天。</p>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_ad129aa0-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify;"><br/></p>
<p style="text-align: justify;">客服回复</p>
<p style="text-align: justify;">客服人员可以通过【移动端小程序客服】，进行实时接入与用户的即时聊天。</p>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_ad24fd76-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify;"><br/></p>
<h1 style="text-align: justify;">打开意见反馈</h1>
<p style="text-align: justify;">打开“意见反馈”页面，用户可提交反馈内容并上传日志，开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容。</p>
<p style="text-align: justify;">在my.wxml中，编写代码：</p>
<pre class="ql-syntax" spellcheck="false" style="background-color: rgb(250, 250, 250); margin-top: 20px; font-size: 18px; margin-bottom: 20px;">&lt;view <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"cu-item arrow"</span>&gt;
&nbsp; &lt;button <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-symbol">'cu</span>-btn content' open-<span class="hljs-class"><span class="hljs-keyword">type</span></span>=<span class="hljs-symbol">'feedbac</span>k'&gt;
&nbsp; &nbsp; &lt;text <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-symbol">'icon</span>-writefill text-sky'&gt;&lt;/text&gt;
&nbsp; &nbsp; &lt;text <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-symbol">'text</span>-grey'&gt;问题反馈&lt;/text&gt;
&nbsp; &lt;/button&gt;
&lt;/view&gt;
</pre>
<p style="text-align: justify;">用户反馈</p>
<p style="text-align: justify;">在小程序客户端，点击【问题反馈】按钮，选择反馈类型、反馈内容，然后填写详细描述，提交即可。</p>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_ad380e98-0218-11ee-843e-acde48001122.png"/></p>
<p style="text-align: justify;"><br/></p>
<p style="text-align: justify;">管理员查看反馈</p>
<p style="text-align: justify;">管理员在后台【用户反馈】-【功能异常】或者【产品建议】即可查看具体反馈内容，然后做出相应的处理或者优化。</p>
<p style="text-align: justify;"><img src="https://image.wxopen.club/content_ad4914fe-0218-11ee-843e-acde48001122.png"/></p>
<h1></h1>
</div>]]></description>
      <author>leiwang</author>
      <pubDate>Tue, 30 May 2023 14:31:24 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[使用开源地图组件leafletwx加载自制手绘地图]]></title>
      <link>https://wxopen.club/topic/647b4a6d4cdb06243e5a85bb</link>
      <guid>https://wxopen.club/topic/647b4a6d4cdb06243e5a85bb</guid>
      <description><![CDATA[<div class="markdown-text"><blockquote style="font-size: 16px;">leafletwx是基于leaflet，使用微信原生组件开发的一套开源地图组件，目的是替换小程序内的原生map组件，项目开源地址：<a href="https://gitee.com/zz2022com/leafletwx" rel="noopener noreferrer" style="color: rgb(78, 161, 219);" target="_blank">leatletwx</a>。</blockquote>
<blockquote style="font-size: 16px;"><span style="color: rgb(77, 77, 77); font-size: 16px;">&nbsp;本示例开源地址在</span><a href="https://gitee.com/zz2022com/leafletwx" rel="noopener noreferrer" style="color: rgb(78, 161, 219); font-size: 16px;" target="_blank">leafletwx</a><span style="color: rgb(77, 77, 77); font-size: 16px;">的mymap页面。</span></blockquote>
<p><strong style="font-size: 16px; color: rgb(77, 77, 77);">加载自制手绘地图效果：</strong></p>
<p><span style="font-size: 16px; color: rgb(77, 77, 77);">﻿</span><img src="https://image.wxopen.club/content_bfb16178-0218-11ee-843e-acde48001122.png" alt=""></p>
<p><strong style="font-size: 20px;">如何将手绘地图转换为瓦片</strong></p>
<p>可以使用gdal，安装成功后，使用命令</p>
<p>切分瓦片（使用gdal）： <a href="http://gdal2tiles-l.py">gdal2tiles-l.py</a> -l -p raster -z 1-3 -w none [source_image] [target_dir]</p>
<p>例如：<a href="http://gdal2tiles-l.py">gdal2tiles-l.py</a> -l -p raster -z 1-3 -w none 1.jpg out</p>
<p>即可生成瓦片地图数据</p>
<p>如果需要在不同的地图层级加载不同的地图细节，可以制作两张大小一样的地图图片，生成不同的层级即可</p>
<p><strong style="font-size: 20px;">图片坐标与地理坐标如何转换</strong></p>
<p>图片坐标点与地理坐标点互转方法如下(引入的库在组件内可以找到，须知道原始图片大小和图片左上角及右下角分别对应的地理坐标):</p>
<pre class="ql-syntax" spellcheck="false"><span class="hljs-keyword">import</span> {LagLngPoint} <span class="hljs-keyword">from</span> <span class="hljs-string">'./LagLng.Utils'</span>
<span class="hljs-keyword">import</span> {latLng2xy, xy2latLng} <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/util'</span>

<span class="hljs-comment">// 图片坐标点转地理坐标点</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">rasterImage2latLng</span>(<span class="hljs-params">imgPosition, imgSize, leftUpLatLng, rightDownLatLng</span>) </span>{
&nbsp; <span class="hljs-keyword">let</span> latLng = <span class="hljs-keyword">new</span> LagLngPoint(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>);
&nbsp; <span class="hljs-keyword">let</span> _imgPos = [
&nbsp; &nbsp; <span class="hljs-built_in">Math</span>.max(<span class="hljs-number">0</span>, <span class="hljs-built_in">Math</span>.max(imgSize[<span class="hljs-number">0</span>], imgPosition[<span class="hljs-number">0</span>])),
&nbsp; &nbsp; imgSize[<span class="hljs-number">1</span>] - <span class="hljs-built_in">Math</span>.max(<span class="hljs-number">0</span>, <span class="hljs-built_in">Math</span>.max(imgSize[<span class="hljs-number">1</span>], imgPosition[<span class="hljs-number">1</span>])),
&nbsp; ];
&nbsp; <span class="hljs-keyword">const</span> ag = xy2latLng(_imgPos[<span class="hljs-number">0</span>], _imgPos[<span class="hljs-number">1</span>], <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, imgSize[<span class="hljs-number">0</span>], imgSize[<span class="hljs-number">1</span>], leftUpLatLng.longitude, leftUpLatLng.latitude, rightDownLatLng.longitude, rightDownLatLng.latitude);
&nbsp; latLng.longitude = ag.lon;
&nbsp; latLng.latitude = ag.lat;
&nbsp; <span class="hljs-keyword">return</span> latLng;
}
<span class="hljs-comment">// 地理坐标点转图片坐标点</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">latLng2rasterImage</span>(<span class="hljs-params">latLng, imgSize, leftUpLatLng, rightDownLatLng</span>) </span>{
&nbsp; <span class="hljs-keyword">let</span> imgPosition = [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>];
&nbsp; <span class="hljs-keyword">const</span> minLng = <span class="hljs-built_in">Math</span>.min(leftUpLatLng.longitude, rightDownLatLng.longitude);
&nbsp; <span class="hljs-keyword">const</span> maxLng = <span class="hljs-built_in">Math</span>.max(leftUpLatLng.longitude, rightDownLatLng.longitude);
&nbsp; <span class="hljs-keyword">const</span> minLat = <span class="hljs-built_in">Math</span>.min(leftUpLatLng.latitude, rightDownLatLng.latitude);
&nbsp; <span class="hljs-keyword">const</span> maxLat = <span class="hljs-built_in">Math</span>.max(leftUpLatLng.latitude, rightDownLatLng.latitude);
&nbsp; <span class="hljs-keyword">let</span> lng = <span class="hljs-built_in">Math</span>.min(maxLng, <span class="hljs-built_in">Math</span>.max(latLng.longitude, minLng));
&nbsp; <span class="hljs-keyword">let</span> lat = <span class="hljs-built_in">Math</span>.min(maxLat, <span class="hljs-built_in">Math</span>.max(latLng.latitude, minLat));
&nbsp;
&nbsp; <span class="hljs-keyword">let</span> xy = latLng2xy(lng, lat, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, imgSize[<span class="hljs-number">0</span>], imgSize[<span class="hljs-number">1</span>], leftUpLatLng.longitude, leftUpLatLng.latitude, rightDownLatLng.longitude, rightDownLatLng.latitude)
&nbsp; <span class="hljs-keyword">return</span> [<span class="hljs-built_in">Math</span>.round(xy.x), <span class="hljs-built_in">Math</span>.round(xy.y)];
}

</pre>
</div>]]></description>
      <author>zengyong</author>
      <pubDate>Tue, 30 May 2023 14:15:28 GMT</pubDate>
    </item>
  
    <item>
      <title><![CDATA[无缘无故所有微信直播账号封了，无任何提示无任何违规信息]]></title>
      <link>https://wxopen.club/topic/647b4ab74cdb06243e5a85ed</link>
      <guid>https://wxopen.club/topic/647b4ab74cdb06243e5a85ed</guid>
      <description><![CDATA[<div class="markdown-text"><p>无缘无故所有微信直播账号封了，无任何提示无任何违规信息</p>
<img src="https://image.wxopen.club/content_ebdf6920-0218-11ee-843e-acde48001122.jpg" width="191px"/>
<img src="https://image.wxopen.club/content_ebf2ff4e-0218-11ee-843e-acde48001122.jpg" width="229px"/>
<p>无任何违规就是无法开播。</p>
<p>无缘无故所有微信直播账号封了，无任何提示无任何违规信息</p>
<img src="https://image.wxopen.club/content_ebdf6920-0218-11ee-843e-acde48001122.jpg" width="191px"/>
<img src="https://image.wxopen.club/content_ebf2ff4e-0218-11ee-843e-acde48001122.jpg" width="229px"/>
<p>无任何违规就是无法开播。</p>
</div>]]></description>
      <author>na49</author>
      <pubDate>Tue, 30 May 2023 14:11:33 GMT</pubDate>
    </item>
  
  </channel>
</rss>