微信小程序> 小程序发送模板消息详细步骤

小程序发送模板消息详细步骤

浏览量:579 时间: 来源:程序猿联盟

小程序发送通模板消息详细步骤

    • 步骤一:获取模板id
    • 步骤二:页面的form组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息。或者当用户完成支付行为,可以获取prepay_id用于发送模板消息。
        • 1、wxml页面确认订单按钮如下来获取一个formid
        • 2、js获取formid并且请求get_form_id接口,把formid保存
        • 3、在get_form_id接口里接收formid并组装数据存到数据库
    • 步骤三:调用接口下发模板消息
        • 1、在**用户支付成功的接口**里我们调用如下的接口,把模板消息里需要的这5个数据都通过订单id获取到,赋值给data。然后再请求RoutineTemplateService::sendTemplate()。
        • 2、在RoutineTemplateService::sendTemplate()里获取参数,[获取access_token](https://mp.csdn.net/mdeditor/86238048#)。然后用RoutineServer::curlPost发起请求。

步骤一:获取模板id

登录https://mp.weixin.qq.com 获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用。

小程序

步骤二:页面的form组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息。或者当用户完成支付行为,可以获取prepay_id用于发送模板消息。

用formid举例:
注意:有的时候我们可能遇到某些情况,希望一次点击获取多个formid,此时请参考此文(https://www.jianshu.com/p/84dd9cd6eaed),我们只用修改wxml和wxss就行,js获取方式不变,不用改。

1、wxml页面确认订单按钮如下来获取一个formid

小程序

form bindsubmit="subBuy" report-submit='true' button class='foot-wrapper' form-type='submit'确定/button /form

2、js获取formid并且请求get_form_id接口,把formid保存

subBuy:function(e){    wx.request({      url: app.globalData.url + '/routine/auth_api/get_form_id?uid=' + app.globalData.uid,      method: 'GET',      data: {        formId: e.detail.formId      },    })}

3、在get_form_id接口里接收formid并组装数据存到数据库

/** * 收集发送模板信息的formID * @param string $formId */public function get_form_id($formId = ''){    if((int)$formId == '' || $formId == 'the formId is a mock one') return JsonService::fail('no');    $data['form_id'] = $formId;    $data['uid'] = $this-userInfo['uid'];    $data['status'] = 1; //未使用状态是1    $data['stop_time'] = bcadd(time(),bcmul(6,86400,0),0);    RoutineFormId::set($data);    return JsonService::successful();}

通过上面的get_form_id接口,数据库获得如下数据:
小程序

字段说明:

uid 就是用户id,一般就是当前操作(下单用户)的uid;formid 相当于权限,只有拥有formid,才有资格给用户发送通知stop_time 是失效时间,自己设定,一般是6或7天,如果当前时间大于这个时间,就不能发送通知了;status 是状态,表示这个formid是否使用过,未使用是1,使用过是2,也就是在发送通知的时候使用,使用后就要把1改为2。

步骤三:调用接口下发模板消息

拿订单支付成功的消息来说,我们的模板消息如下:
单号{{keyword1.DATA}}
下单时间 {{keyword2.DATA}}
订单状态{{keyword3.DATA}}
支付金额 {{keyword4.DATA}}
支付方式{{keyword5.DATA}}

1、在用户支付成功的接口里我们调用如下的接口,把模板消息里需要的这5个数据都通过订单id获取到,赋值给data。然后再请求RoutineTemplateService::sendTemplate()。

/** * 订单支付成功发送模板消息 * @param string $orderId 订单id */public static function sendOrderSuccess($orderId = ''){    if($orderId == '') return ;    $order = StoreOrder::where('order_id',$orderId)-find();    $formId = RoutineFormId::getFormIdOne($order['uid']);//该方法获取数据库已存的未使用的formid    $data['keyword1']['value'] =  $orderId;    $data['keyword2']['value'] =  date('Y-m-d H:i:s',time());    $data['keyword3']['value'] =  '已支付';    $data['keyword4']['value'] =  $order['pay_price'];    $data['keyword5']['value'] =  '线下支付';    RoutineFormId::delFormIdOne($formId);//该方法更新该formid的status为2,就是已使用    RoutineTemplateService::sendTemplate('这里是openid','这里是你选择的模板id','',$data,$formId);}

2、在RoutineTemplateService::sendTemplate()里获取参数,获取access_token。然后用RoutineServer::curlPost发起请求。

/**     * 发送模板消息     * @$openId   接收者(用户)的 openid     * @$templateId 所需下发的模板消息的id     * @$link 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。     * @$formId 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id     * @param array $dataKey 模板内容,不填则下发空模板     * @$emphasisKeyword 模板需要放大的关键词,不填则默认不放大     */    public static function sendTemplate($openId = '',$templateId = '',$link = '',$dataKey = array(),$formId = '',$emphasisKeyword = ''){        if($openId == '' || $templateId == '' || $formId == '') return false;        $accessToken = RoutineServer::get_access_token();        $url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=".$accessToken;        $data['touser'] =  $openId;        $data['template_id'] =  $templateId;         $data['page'] =  $link;         $data['form_id'] =  $formId;        $data['data'] =  $dataKey;        $data['emphasis_keyword'] =  $emphasisKeyword;        return json_decode(RoutineServer::curlPost($url,json_encode($data)),true);    }

RoutineServer::curlPost方法如下:

public static function curlPost($url = '', $postData = '', $options = array()){    if (is_array($postData)) {        $postData = http_build_query($postData);    }    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    curl_setopt($ch, CURLOPT_POST, 1);    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);    curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数    if (!empty($options)) {        curl_setopt_array($ch, $options);    }    //https请求 不验证证书和host    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);    $data = curl_exec($ch);    curl_close($ch);    return $data;}

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎