index.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  1. // pages/exampleDetail/index.js
  2. // 云模板未安装错误码
  3. const CLOUD_MODULE_NOT_INSTALLED = 'InnerError.ResourceNotFound';
  4. Page({
  5. data: {
  6. type: '',
  7. envId: '',
  8. showUploadTip: false,
  9. installModalVisible: false,
  10. installModalTipText: '',
  11. installModuleName: '',
  12. installModulePageTitle: '',
  13. userOpenId: 'ouSoxxxxxxxxxxxxxJp3zM',
  14. currentOpenId:'',
  15. templateId: 'XeULkxnxxxxxxxxxxxxxx9vRO0olhrQi34',
  16. getErrorInfo:'',
  17. securityContent:'hello world!',
  18. securityMedia:'https://developers.weixin.qq.com/miniprogram/assets/images/head_global_z_@all.png',
  19. mediaId:'MEDIA_ID',
  20. sendCustomMessage:'Hello World',
  21. urlLink:'https://wxaurl.cn/difT1VdVOLa',
  22. smsTemplateId:'2053122',
  23. phoneNumber:'+8611111111111',
  24. appid:'appid',
  25. csvLink:'extension://xxx.zip',
  26. qrcode:'',
  27. unlimitedQrcode:'',
  28. qrcodeShortLink:''
  29. },
  30. handdleResult: function(data){
  31. if(data.message.includes('env not exists') || data.message.includes('Environment not found') || data.message.includes('env check invalid be filterd')){
  32. this.setData({
  33. showUploadTip: true,
  34. });
  35. }
  36. wx.hideLoading();
  37. },
  38. bindKeyInputCsvLink: function(e){
  39. this.setData({
  40. csvLink: e.detail.value
  41. })
  42. },
  43. bindKeyInputUrlLink: function(e){
  44. this.setData({
  45. urlLink: e.detail.value
  46. })
  47. },
  48. bindKeyInputSmsTemplateId: function(e){
  49. this.setData({
  50. smsTemplateId: e.detail.value
  51. })
  52. },
  53. bindKeyInputPhoneNumber: function(e){
  54. this.setData({
  55. phoneNumber: e.detail.value
  56. })
  57. },
  58. bindKeyInputAppid: function(e){
  59. this.setData({
  60. appid: e.detail.value
  61. })
  62. },
  63. bindKeyInputSendCustomMessage: function(e){
  64. this.setData({
  65. sendCustomMessage: e.detail.value
  66. })
  67. },
  68. bindKeyInputMediaId: function(e){
  69. this.setData({
  70. mediaId: e.detail.value
  71. })
  72. },
  73. bindKeyInputSecurityMedia: function(e){
  74. this.setData({
  75. securityMedia: e.detail.value
  76. })
  77. },
  78. bindKeyInputSecurityContent: function(e){
  79. this.setData({
  80. securityContent: e.detail.value
  81. })
  82. },
  83. bindKeyInputTemplateId: function (e) {
  84. this.setData({
  85. templateId: e.detail.value
  86. })
  87. },
  88. bindKeyInputOpenId: function (e) {
  89. this.setData({
  90. userOpenId: e.detail.value
  91. })
  92. },
  93. clearError: function(){
  94. this.setData({
  95. userOpenId: '',
  96. templateId: '',
  97. getErrorInfo:'',
  98. securityMedia:'',
  99. securityContent:'',
  100. mediaId:'',
  101. sendCustomMessage:'',
  102. urlLink:'',
  103. smsTemplateId:'',
  104. phoneNumber:'',
  105. appid:'',
  106. csvLink:'',
  107. qrcode:'',
  108. unlimitedQrcode:'',
  109. qrcodeShortLink:''
  110. })
  111. },
  112. onLoad(options) {
  113. wx.setNavigationBarTitle({
  114. title: `${options?.title}-${options?.subtitle}`
  115. })
  116. this.setData({ type: options?.type, envId: options?.envId});
  117. },
  118. // 发送消息
  119. sendMessage() {
  120. wx.showLoading({
  121. title: '',
  122. });
  123. wx.cloud
  124. .callFunction({
  125. name: 'cloudbase_module',
  126. data: {
  127. name: 'wx_message_send_message',
  128. data: {
  129. template_id: this.data.templateId, // 所需下发的订阅模板id
  130. page: "pages/index/index", //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转
  131. touser: this.data.userOpenId, //接收者(用户)的 openid
  132. data:{ "thing1": { "value": 123 }, "thing4": { "value": 123 },"thing6": { "value": 123 },"thing7": { "value": 123 },"time6":{"value": "2022-11-32"} }, //模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }的object
  133. miniprogram_state:"trial", //跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
  134. lang:"zh_CN" //进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN
  135. },
  136. },
  137. })
  138. .then((resp) => {
  139. if (resp?.result?.errcode === CLOUD_MODULE_NOT_INSTALLED) {
  140. this.setData({
  141. installModalVisible: true,
  142. installModalTipText: '云开发>云模板>模板中心>小程序消息',
  143. installModuleName: 'wx_message_send_message',
  144. installModulePageTitle:'小程序消息-发送消息'
  145. });
  146. }else if(resp?.result?.errcode !== -1){
  147. wx.showToast({
  148. title: "发送失败",
  149. icon: 'error',
  150. duration: 2000
  151. });
  152. this.setData({
  153. getErrorInfo:resp?.result?.errmsg,
  154. })
  155. }else {
  156. wx.showToast({
  157. title: "发送成功",
  158. icon: 'success',
  159. duration: 2000
  160. });
  161. }
  162. wx.hideLoading();
  163. })
  164. .catch((e) => {
  165. this.handdleResult(e);
  166. });
  167. },
  168. // 创建activity_id
  169. createMessageActivityId() {
  170. wx.showLoading({
  171. title: '',
  172. });
  173. wx.cloud
  174. .callFunction({
  175. name: 'cloudbase_module',
  176. data: {
  177. name: 'wx_message_create_activity_id',
  178. data: {
  179. openid: this.data.userOpenId, //为私密消息创建activity_id时,指定分享者为openid用户。其余用户不能用此activity_id分享私密消息。openid与unionid填一个即可。私密消息暂不支持云函数生成activity id。
  180. },
  181. }
  182. })
  183. .then((resp) => {
  184. if (resp?.result?.errcode === CLOUD_MODULE_NOT_INSTALLED) {
  185. this.setData({
  186. installModalVisible: true,
  187. installModalTipText: '云开发>云模板>模板中心>小程序消息',
  188. installModuleName: 'wx_message_send_message',
  189. installModulePageTitle:'小程序消息-创建activity_id'
  190. });
  191. }else if(resp?.result?.activityId){
  192. wx.showToast({
  193. title: "创建成功",
  194. icon: 'success',
  195. duration: 2000
  196. });
  197. }else {
  198. wx.showToast({
  199. title: "创建失败",
  200. icon: 'error',
  201. duration: 2000
  202. });
  203. this.setData({
  204. getErrorInfo:resp?.result?.errmsg,
  205. })
  206. }
  207. wx.hideLoading();
  208. })
  209. .catch((e) => {
  210. this.handdleResult(e);
  211. });
  212. },
  213. // 获取小程序码
  214. getCodeSrc() {
  215. wx.showLoading({
  216. title: '',
  217. });
  218. wx.cloud
  219. .callFunction({
  220. name: 'cloudbase_module',
  221. data: {
  222. name: 'wx_qrcode_get_qrcode',
  223. data: {
  224. path: 'pages/index/index', // 扫码进入的小程序页面路径,最大长度 1024 个字符,不能为空,scancode_time为系统保留参数,不允许配置;对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar",即可在 wx.getLaunchOptionsSync 接口中的 query 参数获取到 {foo:"bar"}。
  225. width: 430, //二维码的宽度,单位 px。默认值为430,最小 280px,最大 1280px
  226. auto_color: false, //默认值false;自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
  227. line_color: { r: 0, g: 0, b: 0 }, //默认值{"r":0,"g":0,"b":0} ;auto_color 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"} 十进制表示
  228. is_hyaline: false, //默认值false;是否需要透明底色,为 true 时,生成透明底色的小程序码
  229. env_version: 'trial', //要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
  230. },
  231. },
  232. })
  233. .then((resp) => {
  234. if (resp?.result?.errcode === CLOUD_MODULE_NOT_INSTALLED) {
  235. this.setData({
  236. installModalVisible: true,
  237. installModalTipText: '云开发>云模板>模板中心>微信小程序码和链接',
  238. installModuleName: 'wx_qrcode',
  239. installModulePageTitle:'微信小程序码和链接-获取小程序码'
  240. });
  241. } else {
  242. wx.showToast({
  243. title: "获取成功",
  244. icon: 'success',
  245. duration: 2000
  246. });
  247. this.setData({
  248. qrcode: resp.result.tempFileURL,
  249. });
  250. }
  251. wx.hideLoading();
  252. })
  253. .catch((e) => {
  254. this.handdleResult(e);
  255. });
  256. },
  257. // 获取不限制的小程序码
  258. getUnlimitedCodeSrc() {
  259. wx.showLoading({
  260. title: '',
  261. });
  262. wx.cloud
  263. .callFunction({
  264. name: 'cloudbase_module',
  265. data: {
  266. name: 'wx_qrcode_get_unlimited_qrcode',
  267. data: {
  268. scene: 'abc', //最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
  269. page: 'pages/index/index', //默认是主页,页面 page,例如 pages/index/index,根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面。scancode_time为系统保留参数,不允许配置
  270. check_path: true, //默认是true,检查page 是否存在,为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);为 false 时允许小程序未发布或者 page 不存在, 但page 有数量上限(60000个)请勿滥用。
  271. env_version: 'trial', //要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
  272. width: 430, // 默认430,二维码的宽度,单位 px,最小 280px,最大 1280px
  273. auto_color: false, //自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调,默认 false
  274. line_color: {"r":0,"g":0,"b":0}, //默认是{"r":0,"g":0,"b":0} 。auto_color 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"} 十进制表示
  275. is_hyaline: false, //默认是false,是否需要透明底色,为 true 时,生成透明底色的小程序
  276. },
  277. },
  278. })
  279. .then((resp) => {
  280. if (resp?.result?.errcode === CLOUD_MODULE_NOT_INSTALLED) {
  281. this.setData({
  282. installModalVisible: true,
  283. installModalTipText: '云开发>云模板>模板中心>微信小程序码和链接',
  284. installModuleName: 'wx_qrcode',
  285. installModulePageTitle:'微信小程序码和链接-获取不限制的小程序码'
  286. });
  287. }else if(resp.result?.errmsg){
  288. wx.showToast({
  289. title: "获取失败",
  290. icon: 'error',
  291. duration: 2000
  292. });
  293. this.setData({
  294. getErrorInfo:resp?.result?.errmsg,
  295. })
  296. } else {
  297. wx.showToast({
  298. title: "获取成功",
  299. icon: 'success',
  300. duration: 2000
  301. });
  302. this.setData({
  303. unlimitedQrcode: resp.result.tempFileURL,
  304. });
  305. }
  306. wx.hideLoading();
  307. })
  308. .catch((e) => {
  309. this.handdleResult(e);
  310. });
  311. },
  312. // 获取ShortLink
  313. getShortLink() {
  314. wx.showLoading({
  315. title: '',
  316. });
  317. wx.cloud
  318. .callFunction({
  319. name: 'cloudbase_module',
  320. data: {
  321. name: 'wx_qrcode_generate_short_link',
  322. data: {
  323. page_url: 'pages/index/index', // 通过 Short Link 进入的小程序页面路径,必须是已经发布的小程序存在的页面,可携带 query,最大1024个字符
  324. page_title: '首页', //页面标题,不能包含违法信息,超过20字符会用... 截断代替
  325. is_permanent: false, //默认值false。生成的 Short Link 类型,短期有效:false,永久有效:true
  326. },
  327. },
  328. })
  329. .then((resp) => {
  330. if (resp?.result?.errcode === CLOUD_MODULE_NOT_INSTALLED) {
  331. this.setData({
  332. installModalVisible: true,
  333. installModalTipText: '云开发>云模板>模板中心>微信小程序码和链接',
  334. installModuleName: 'wx_qrcode',
  335. installModulePageTitle:'微信小程序码和链接-获取ShortLink'
  336. });
  337. }else if(resp.result?.errmsg){
  338. wx.showToast({
  339. title: "获取失败",
  340. icon: 'error',
  341. duration: 2000
  342. });
  343. this.setData({
  344. getErrorInfo:resp?.result?.errmsg,
  345. })
  346. } else {
  347. wx.showToast({
  348. title: "获取成功",
  349. icon: 'success',
  350. duration: 2000
  351. });
  352. this.setData({
  353. qrcodeShortLink: resp.result.tempFileURL,
  354. });
  355. }
  356. wx.hideLoading();
  357. })
  358. .catch((e) => {
  359. this.handdleResult(e);
  360. });
  361. },
  362. // 发送短信
  363. sendCloudbaseSms() {
  364. wx.showLoading({
  365. title: '',
  366. });
  367. wx.cloud
  368. .callFunction({
  369. name: 'cloudbase_module',
  370. data: {
  371. name: 'wx_sms_new_send_cloudbase_sms',
  372. data: {
  373. env: this.data.envId, // 环境 ID
  374. url_link: this.data.urlLink, // URL Link
  375. template_id: this.data.smsTemplateId, //短信模版 ID 默认值:2053122(销类短信模版 ID)
  376. template_param_list: ['xxx'], //短信模版变量数组
  377. phone_number_list: [this.data.phoneNumber], //手机号列表,单次请求最多支持 1000 个境内手机号,手机号必须以+86开头
  378. use_short_name: false, //是否使用小程序简称
  379. resource_appid: this.data.appid, //资源方appid,第三方代开发时可填第三方appid或小程序appid,应为所填环境所属的账号APPID
  380. },
  381. },
  382. })
  383. .then((resp) => {
  384. if (resp?.result?.errcode === CLOUD_MODULE_NOT_INSTALLED) {
  385. this.setData({
  386. installModalVisible: true,
  387. installModalTipText: '云开发>云模板>模板中心>小程序短信',
  388. installModuleName: 'wx_sms_new_send_cloudbase_sms',
  389. installModulePageTitle:'小程序短信-发送短信'
  390. });
  391. }else if(resp?.result?.errmsg){
  392. wx.showToast({
  393. title: "发送失败",
  394. icon: 'error',
  395. duration: 2000
  396. });
  397. this.setData({
  398. getErrorInfo:resp?.result?.errmsg,
  399. })
  400. }else {
  401. wx.showToast({
  402. title: "发送成功",
  403. icon: 'success',
  404. duration: 2000
  405. });
  406. }
  407. wx.hideLoading();
  408. })
  409. .catch((e) => {
  410. this.handdleResult(e);
  411. });
  412. },
  413. // 创建发短信任务
  414. sendCloudbaseSmsTask() {
  415. wx.showLoading({
  416. title: '',
  417. });
  418. wx.cloud
  419. .callFunction({
  420. name: 'cloudbase_module',
  421. data: {
  422. name: 'wx_sms_create_send_sms_task',
  423. data:{
  424. env: this.data.envId, // 环境 ID
  425. file_url: this.data.csvLink, //短信 CSV 文件地址CodeUri
  426. template_id: this.data.smsTemplateId, //短信模版 ID 默认值:2053122(销类短信模版 ID)
  427. use_short_name: false //是否使用小程序简称
  428. }
  429. },
  430. })
  431. .then((resp) => {
  432. if (resp?.result?.errcode === CLOUD_MODULE_NOT_INSTALLED) {
  433. this.setData({
  434. installModalVisible: true,
  435. installModalTipText: '云开发>云模板>模板中心>小程序短信',
  436. installModuleName: 'wx_sms_new_send_cloudbase_sms',
  437. installModulePageTitle:'小程序短信-创建发短信任务'
  438. });
  439. }else if(resp?.result?.errmsg){
  440. wx.showToast({
  441. title: "创建失败",
  442. icon: 'error',
  443. duration: 2000
  444. });
  445. this.setData({
  446. getErrorInfo:resp?.result?.errmsg,
  447. })
  448. }else {
  449. wx.showToast({
  450. title: "创建成功",
  451. icon: 'success',
  452. duration: 2000
  453. });
  454. }
  455. wx.hideLoading();
  456. })
  457. .catch((e) => {
  458. this.handdleResult(e);
  459. });
  460. },
  461. // 文本内容安全识别
  462. securityMessageCheck() {
  463. wx.showLoading({
  464. title: '',
  465. });
  466. wx.cloud
  467. .callFunction({
  468. name: 'cloudbase_module',
  469. data: {
  470. name: 'wx_security_msg_sec_check',
  471. data: {
  472. scene: 1, // 场景值 1, 代表资料
  473. version: 2, // 接口版本号,2.0版本为固定值2
  474. content: this.data.securityContent, // 要检测的内容
  475. },
  476. },
  477. })
  478. .then((resp) => {
  479. if (resp?.result?.errcode === CLOUD_MODULE_NOT_INSTALLED) {
  480. this.setData({
  481. installModalVisible: true,
  482. installModalTipText: '云开发>云模板>模板中心>小程序安全能力',
  483. installModuleName: 'wx_security_msg_sec_check',
  484. installModulePageTitle:'小程序安全能力-文本内容安全识别'
  485. });
  486. }else if(resp?.result?.result?.label === 100){
  487. wx.showToast({
  488. title: "内容正常",
  489. icon: 'success',
  490. duration: 2000
  491. });
  492. }else{
  493. wx.showToast({
  494. title: "内容异常",
  495. icon: 'error',
  496. duration: 2000
  497. });
  498. }
  499. wx.hideLoading();
  500. })
  501. .catch((e) => {
  502. this.handdleResult(e);
  503. });
  504. },
  505. // 音视频内容安全识别
  506. securityMediaCheck() {
  507. wx.showLoading({
  508. title: '',
  509. });
  510. wx.cloud
  511. .callFunction({
  512. name: 'cloudbase_module',
  513. data: {
  514. name: 'wx_security_media_check',
  515. data: {
  516. scene: 1, // 场景值 1, 代表资料
  517. version: 2, // 接口版本号,2.0版本为固定值2
  518. media_url: this.data.securityMedia, // 要检测的内容
  519. media_type: 2, //媒体资源类型,2 代表图片图片
  520. },
  521. },
  522. })
  523. .then((resp) => {
  524. if (resp?.result?.errcode === CLOUD_MODULE_NOT_INSTALLED) {
  525. this.setData({
  526. installModalVisible: true,
  527. installModalTipText: '云开发>云模板>模板中心>小程序安全能力',
  528. installModuleName: 'wx_security_msg_sec_check',
  529. installModulePageTitle:'小程序安全能力-音视频内容安全识别'
  530. });
  531. }else if(resp?.result?.errmsg){
  532. wx.showToast({
  533. title: "内容异常",
  534. icon: 'error',
  535. duration: 2000
  536. });
  537. this.setData({
  538. getErrorInfo:resp?.result?.errmsg,
  539. })
  540. }else{
  541. wx.showToast({
  542. title: "内容正常",
  543. icon: 'success',
  544. duration: 2000
  545. });
  546. }
  547. wx.hideLoading();
  548. })
  549. .catch((e) => {
  550. this.handdleResult(e);
  551. });
  552. },
  553. // 获取用户openId
  554. getUserOpenId() {
  555. wx.showLoading({
  556. title: '',
  557. });
  558. wx.cloud
  559. .callFunction({
  560. name: 'cloudbase_module',
  561. data: {
  562. name: 'wx_user_get_open_id',
  563. },
  564. })
  565. .then((resp) => {
  566. if (resp?.result?.errcode === CLOUD_MODULE_NOT_INSTALLED) {
  567. this.setData({
  568. installModalVisible: true,
  569. installModalTipText: '云开发>云模板>模板中心>小程序用户信息',
  570. installModuleName: 'wx_user_get_open_id',
  571. installModulePageTitle:'小程序用户信息-获取用户openId'
  572. });
  573. }else {
  574. this.setData({
  575. currentOpenId: resp.result.openId,
  576. });
  577. }
  578. wx.hideLoading();
  579. })
  580. .catch((e) => {
  581. this.handdleResult(e);
  582. });
  583. },
  584. // 手机号快速验证
  585. getPhoneNumber(e) {
  586. console.log(e.detail.code); // 动态令牌
  587. wx.cloud.callFunction({
  588. name: 'cloudbase_module',
  589. data: {
  590. name: 'wx_user_get_phone_number',
  591. data: {
  592. code: e.detail.code,
  593. },
  594. },
  595. success: (res) => {
  596. const phoneInfo = res.result?.phoneInfo;
  597. console.log('获取到的手机号信息: ', phoneInfo);
  598. },
  599. });
  600. }
  601. });