微信小程序模板信息【详】

 

前段时间做毕设用到过,怕以后会忘记,特地记录下,主要是发送模板信息和批量收集formid

 

一.发送模板信息

效果图

 

首先小程序发送模板信息需要以下几样参数

1.access_token

2.模板id

3.openid

4.formid

官方文档

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/template-message.html

1.获取access_token (需要知道小程序的appid和appsecret)

接口地址:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

返回格式:

{"access_token": "ACCESS_TOKEN", "expires_in": 7200}

当然,由于调用token接口的次数是有限制的。。所以可以先将获取到的token缓存起来,要用的时候先检测缓存是否过期(2个小时),如果没过期就直接使用缓存中的token,过期就调用接口。此处用的是TP5框架

public function access_token(){$appid = 'xxxxxxxx';$appsecret = 'xxxxxxxx';$access_token=Cache::get('weixin_access_token');if($access_token){return json(['access_token'=>$access_token]);}else{$url_get ='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;$ch1 = curl_init ();$timeout = 5;curl_setopt ( $ch1, CURLOPT_URL, $url_get );curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, $timeout );curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );$accesstxt = curl_exec ( $ch1 );curl_close($ch1 );$access = json_decode ( $accesstxt, true );// 缓存数据7200秒Cache::set('weixin_access_token',$access['access_token'],7200);return json(['access_token'=>$access['access_token']]);}}

2.获取模板id

在微信公众平台搜索选择你所需要的模板信息,

可以调整关键词的顺序,提交之后可直接在详情查看复制模板id

 

3.获取openid(需要appid和appsecret)

获取openid的方法网上有很多,这里贴几个博主的写的

https://blog.csdn.net/qq_27626333/article/details/54614037

https://blog.csdn.net/qq_34328404/article/details/80624577

https://www.cnblogs.com/YSPyishuihan/p/6885242.html

注:如果是单纯获取openid,可直接获取,不需要用户授权。。。接下来放上我自己的写法(仅供参考)

小程序端

onLoad: function (options) {// 登录wx.login({success: res => {// 发送 res.code 到后台换取 openId, sessionKey, unionIdvar code = res.code;var that=this;//console.log(code);wx.request({url: "https://后台接口地址",data: {"code": code},header: {'content-type': 'application/json'},method: 'GET',success: function (res) {// success  console.log(res.data.openid);that.setData({openid:res.data.openid})}})}})},

后台接口端(TP5)

public function login($code)
{$code=Request::instance()->param('code');$appid = 'xxxxxxxxx';$appsecret = 'xxxxxxx';$url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$appsecret.'&js_code=' . $code . '&grant_type=authorization_code'; $info = file_get_contents($url);//发送HTTPs请求并获取返回的数据,推荐使用curl  $json = json_decode($info,true);//对json数据解码$openid=$json['openid'];if($openid){return json(['status'=>0,'openid'=>$openid]);}else{return json(['status'=>1,'msg'=>"error"]);}}

4.form_id

首先formid有两种获取途径。一是支付行为,二是用户在真机上提交表单,官方文档写得很清楚了。这里获取到formid后可以存到数据库中,等待使用。formid有效期是七天,一个formid只能使用一次,使用后就相当于过期了。但是多个formid互相独立,相当于你提交十个表单就有十个formid

这里再贴几个博主的文章

https://www.cnblogs.com/YSPyishuihan/p/6891262.html

https://segmentfault.com/a/1190000016214784

https://blog.csdn.net/u011415782/article/details/82379590

https://blog.csdn.net/lgj199505/article/details/82425425

接下来放上我自己的写法(仅供参考)

小程序端:

<form bindsubmit="formSubmit" report-submit='true'><input name="openid" class="weui-input" value="{{openid}}" /><view class="weui-btn-area"><button class="weui-btn" type="primary" formType="submit">提交</button></view></view>
</form>
 formSubmit:function(e){var form_id = e.detail.formId;var openid = e.detail.value.openid;wx.request({url: 'https://后台地址',data: {"form_id": form_id,"openid":openid},header: {'content-type': 'application/json'},method: 'GET',success: function (res) {console.log(res.data);}})
}

后台接口端:(将openid一起存入数据库)

public function reg()
{$play_data['form_id']      =      Request::instance()->param('form_id');$play_data['openid']      =      Request::instance()->param('openid');$play_res = db('表名')->insert($play_data);if($play_res){return json(['status'=>0,'msg'=>"注册成功"]);}else{return json(['status'=>1,'msg'=>"注册失败"]);}}

发送模板信息(推送单个用户)

public function send_cet(){$openid="这里填推送用户的openid";$token=json_decode($this->access_token()->getContent(),true);$template_id=""; //模板id$page=""; //点击模板信息后进入的页面 例如 pages/xxx/xxx?id={$id}&name={$name}$res=db('formid_pool')->where('openid',$openid)->find();$data_temp=array("touser"=>$openid,"template_id"=>$template_id,"form_id"=>$res['form_id'],"page"=>$page,"data"=>array("keyword1"=>array("value"=>"陈独秀"),"keyword2"=>array("value"=>"12345678910"),"keyword3"=>array("value"=>"英语四级"),"keyword4"=>array("value"=>"222"),"keyword5"=>array("value"=>"222"),"keyword6"=>array("value"=>"222"),"keyword7"=>array("value"=>"666")));$data_string=json_encode($data_temp);$url="https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=".$token['access_token'];$curl = curl_init($url);curl_setopt($curl, CURLOPT_HEADER, false);curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));curl_setopt($curl, CURLOPT_POST, true);curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);$r=curl_exec($curl);curl_close($curl);$status=json_decode($r,true);if($status['errcode']==0){db('formid_pool')->where('openid',$openid)->where('form_id',$res['form_id'])->delete();   //使用完之后删除echo "success";}else{print_r($status);die;}die;}

二.批量收集formid

这里在网上查了挺多方法的

http://www.51xuediannao.com/xiaochengxu/0cba78ba.html    (主要用的是这个骚操作)

https://blog.csdn.net/jensen_yao/article/details/83341054

button::after{border:none;}
.aa{width: 120rpx;height: 120rpx;position:fixed;}
<form bindsubmit="test" report-submit="{{true}}"><button formType="submit" class='btn'><view class='aa'><form bindsubmit="test" report-submit="true"><button formType="submit" class='btn'><view class='aa'><form bindsubmit="test" report-submit="true"><button formType="submit" class='btn'><view class='aa'>这里可以嵌套着写,目前这种三层格式可以获取7个</view></button></form></view></button></form></view></button></form>
test:function(e){if (e.detail.formId != 'the formId is a mock one') {this.setData({formIdString: e.detail.formId + "," + this.data.formIdString})}console.log(this.data.formIdString)},

这种方法可用在注册上,但是这样收集的也还不够,你可以在用户有可能点击的地方改写为上面的结构,每点击一次,就向后台发送一起请求,将用户的openid和formid发过去,再构建一个formid池(建一个数据表存着),记录下用户的openid和formid和该formid过期的时间,大概是这样

public function save()
{$openid=Request::instance()->param('openid');$formid=Request::instance()->param('formid');$time=date("Y-m-d H:i:s",strtotime('+7 days'));if($formid=="the formId is a mock one"||empty($openid)){return json(['status'=>0,'msg'=>'no']);}else{db('formid_pool')->insert(['openid'=>$openid,'form_id'=>$formid,'time'=>$time]);return json(['status'=>0,'msg'=>'yes']);}}

另外,我当时在改写结构的过程中遇到了个问题,就是安卓机有时候无法获取到formid,苹果却没影响。最后在某个博主的文章找到一点头绪

https://blog.csdn.net/eaglewyy/article/details/80023829

查看了下自己的结构,我在用户有可能点击的地方都改造为上面的结构,但是点击的地方大多数是用navigator标签进行跳转操作,所有有可能navigator打断了小程序bindsubmit事件,直接将原来的navigator标签删掉,并在form中加一个data-fn='页面地址',后台进行跳转

这是原来的

<form bindsubmit="test" report-submit='true'><button formType="submit"><view class='aa'><navigator url='xxxx'><view style="font-size:14px">测试</view></navigator></view></button></form>

改为

<form bindsubmit="test" report-submit='true' data-fn='跳转页面地址'><button formType="submit"><view class='aa'><view style="font-size:14px">测试</view></view></button></form>

js端


test:function(e){wx.navigateTo({url: e.currentTarget.dataset.fn,})
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/57473.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序的模板(template)使用详解

效果图 以MUI的实例首页和列表页面为实例 通过上图&#xff0c;可以看出两个页面的列表部分很相近&#xff0c;以每行作为单元制作模板。 template模板 1、模板存放的位置以及使用模板页面存放的位置 template模板的WXML <!--右侧无箭头 --> <template name"…

微信小程序 模板类 template实例

模板 WXML提供模板&#xff08;template&#xff09;&#xff0c;可以在模板中定义代码片段&#xff0c;然后在不同的地方调用。接下来博主将会以图文讲解&#xff0c;然后最后发出源码供大家参考。 文件结构 本文使用的模板类和模板结构如下&#xff1a; 定义模板 temp…

微信小程序开发之——模板

一 概述 WXML提供模板&#xff08;template&#xff09;&#xff0c;可以在模板中定义代码片段&#xff0c;然后在不同的地方调用定义模板时&#xff1a;使用 name 属性&#xff0c;作为模板的名字。然后在<template/>内定义代码片段导入模板&#xff1a;使用import导入…

【微信小程序模板直接套用】微信小程序制作模板套用平台

微信小程序模板直接套用是小程序制作的好工具&#xff0c;特别是对于没有太多代码基础的企业。下面我分享一个微信小程序模板直接套用平台&#xff0c;超60个行业的微信小程序制作模板套用&#xff0c;页面内容丰富样式多样的微信小程序制作模板套用。 微信小程序制作模板套用…

分享400个微信小程序模板和小程序设计模板

微信小程序模板和小程序设计模板介绍&#xff1a; 分享的微信小程序模板和小程序设计模板&#xff0c;涵盖各行各业的微信小程序功能界面设计模板&#xff0c;也有各种小程序开发的一些特效模板&#xff0c;一共400个&#xff0c;有需要的自取。 微信小程序模板和小程序设计模…

微信小程序----模板(template)

效果体验二维码 如果文章对你有帮助的话&#xff0c;请打开微信扫一下二维码&#xff0c;点击一下广告&#xff0c;支持一下作者&#xff01;谢谢&#xff01; DEMO下载 效果图 以MUI的实例首页和列表页面为实例 通过上图&#xff0c;可以看出两个页面的列表部分很相近&…

全网最详细中英文ChatGPT-GPT-4示例文档-表格智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

从0到1快速入门表格智能生成应用场景 Introduce 简介setting 设置Prompt 提示Sample response 回复样本API request 接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例 其它资料下载 ChatGPT是目前最先进的AI聊天机器人&#xff0c;它能够理解图片和文字…

1 常见的HTTP股票数据接口整理 腾讯 新浪 网易 2019-08-02

写在前面 1 个股&#xff1a;作为量化投资的用户来说&#xff0c;个股K线一定只能使用复权数据来分析&#xff0c;比如说前复权。不然股票一旦分红&#xff0c;派发&#xff0c;不复权数据就会严重失真。 2 指数&#xff1a;指数可以理解成没有复权数据&#xff08;分红按自然…

腾讯控股2020研报部分内容

腾讯控股2020 前言 之前在写《腾讯2020年第三季度财报在哪看》的时候在萝卜投研下载了一份关于腾讯产业构成和战略研报。看完之外我就叹为观止&#xff0c;之后又反复看了七八次&#xff0c;虽然有收获&#xff0c;但是那毕竟是别人的研报&#xff0c;数据如何获取&#xff1…

〖产品思维训练白宝书 - 核心竞争力篇⑨〗- 产品经理核心竞争力解读之产品经理的规划能力对普通人的启发

说明&#xff1a;该文属于 产品思维训练白宝书&#xff0c;目前阶段免费开放&#xff0c;购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区。福利&#xff1a;除了通过订阅"白宝书系列专栏"加入社区获取所有付费专栏的内容之外&#xff0c;还可以通过加入星荐官共赢…

〖全域运营实战白宝书 - 高转化文案速成篇③〗- 高打开率标题型文案的10大黄金法则

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4…

〖产品思维训练白宝书 - 产品思维认知篇⑩〗- 产品经理 的思维方式对我们有着什么样的启发

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4…

〖产品思维训练白宝书 - 核心竞争力篇②〗- 产品经理核心竞争力解读之思辨力

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4…

Midjourney成功的关键:不只靠技术,还有社区

过去一年&#xff0c;人工智能生成的以假乱真图片占据着互联网的各个角落。能完成工作的人工智能产品或系统全球有上百个&#xff0c;比如开源的Stable Diffusion、OpenAI开发的DALLE2&#xff0c;中国也有Tiamat、文心一格等产品。 但人们往往更痴迷Midjourney的作品。现在全…

建设元宇宙基础设施——PPIO边缘云在云渲染/云游戏的思考和实践

关于“元宇宙”的讨论越发火热&#xff0c;而建设元宇宙不可避免需要布设基础设施&#xff0c;LiveVideoStackCon 2022 北京站邀请到PPIO边缘云联合创始人——王闻宇&#xff0c;同大家探讨元宇宙网络时延的最优解–边缘云基础设施的架构与建设&#xff0c;并介绍PPIO边缘云在泛…

科技驱动进化:群硕为企业定制“数字人”,追赶元宇宙时代步伐

你还记得这张图吗&#xff1f; 千万年前&#xff0c;一颗巨型陨石降落地球&#xff0c;爬行动物的黄金时代结束&#xff0c;哺乳动物加速进化&#xff0c;智人成为几十亿人类共同的祖先。 千万年后的今天&#xff0c;在掌握了数字技术以后&#xff0c;人类创造出了一种世界上…

英伟达拟收购ARM 利空国产ARM CPU

据彭博社报道&#xff0c;英伟达有意收购软银集团旗下的芯片企业ARM&#xff0c;而黄仁勋已经私下接触了孙正义&#xff0c;双方就可能达成的收购进行交流&#xff0c;不过是否能够完成收购还未明确。 近年来&#xff0c;孙正义数笔投资损失惨重&#xff0c;因此急需套现填补窟…

政策利空对行情没有长期影响,牛市仍将继续 2021-05-19

昨天稍晚&#xff0c;监管层再次发布公告要求金融支付机构不得开展与虚拟货币相关的业务&#xff0c;并且与此相配合的是《上海证券报》发文&#xff0c;提出如果要彻底封堵虚拟货币&#xff0c;有关部门需要更深层次升级技术。 很多投资者将这则消息视为对行情的大利空&#x…

第一启富金:两大利空压顶 黄金受压收跌

第一启富金官网显示&#xff0c;全球最大黄金上市交易基金(ETF)截至01月19日持仓量为976.21吨&#xff0c;较上日持平&#xff0c;本月止净增持0.55吨。 香港第一金:投资者的注意力仍集中在美联储1月25日至26日的会议上&#xff0c;此前美联储官员暗示&#xff0c;他们将在3月…

第一启富金:两大利空压顶 黄金承压大跌

第一启富金&#xff1a;鲍威尔周一表示&#xff0c;随着通胀升温&#xff0c;决策者需要“迅速采取行动&#xff0c;他上调了升息50个基点的可能性。交易员目前预计&#xff0c;美联储将在5月的下次会议上加息50个基点。上周&#xff0c;美联储三年来首次加息25个基点。鲍威尔的…