PHP实现推送微信模板消息

       大家好啊!好久不见呐,最近可是经济寒冬啊,大家应该都受到影响了吧,甚至反反复复在想我们到底还要不要继续北漂?我们还要不要继续做程序员?这也是我每天在思考的问题,但是既然眼下没有更好的选择,那么我们除了在目前的工位上好好工作,还能做什么呢?当然可爱的你们做出任何选择,珊妹儿都会永远支持你们滴~   感情磕儿咱就不多唠了,今天给大家点干货,哈哈  不谢不谢啊~

       众所周知的拼多多,3亿用户拼出了名声,而且发现没拼多多都是两人团,这个玩法真的是抓到了人们从众心理、爱占便宜的心理,而且还容易满足人们的需求,当我们和别人拼购一件商品,这两个人会同时收到拼团成功的消息,我们的小程序实现了拼团功能,当然要做拼团成功后给拼团成员分别推送拼团成功的消息啦,接下来说重点啊!!!!!!

首先看一遍文档,必不可少,会发现有这么几个接口:

addTemplate  组合模板并添加至帐号下的个人模板库

deleteTemplate  删除帐号下的某个模板

getTemplateLibraryById  获取模板库某个模板标题下关键词库

getTemplateLibraryList   获取小程序模板库标题列表

getTemplateList              获取帐号下已存在的模板列表

sendTemplateMessage   发送模板消息

而我们的需求是拼团成功推送模板消息,那么我们可以在微信公众平台,也就是小程序的后台手动去生成我们想要的模板ID,因为我们的模板是固定的,当然大家如果有多种模板需求,可以把以上方法封装成一个类,需要的时候调用就可以了,现在我们拿到了模板ID,只需要使用发送模板消息的接口就OK了,代码如下(这是我封装的,代码有点丑请见谅!):

/**
 * 发送模板消息
 * @param $openid      string     接收者(用户)的 openid
 * @param $template_id string     所需下发的模板消息的id
 * @param string $page string     点击模板卡片后的跳转页面
 * @param $form_id     string     表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
 * @param string $data string     模板内容,不填则下发空模板
 * @param string $emphasis_keyword  模板需要放大的关键词,不填则默认无放大
 * @return mixed|string
 */
public function sendTemplateMessage($temarr){
    $url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$this->authorizer_access_token;
    $data = '{
        "touser": "'.$temarr['openid'].'",
        "template_id": "'.$temarr['template_id'].'",
        "page": "'.$temarr['page'].'",
        "form_id": "'.$temarr['prepay_id'].'",
        "data": {
            "keyword1": {
                "value": "'.$temarr['info']['good_name'].'"
            },
            "keyword2": {
                "value": "'.$temarr['info']['payment'].'元"
            },
            "keyword3": {
                "value": "'.$temarr['nickname'].'"
            }
    
        },
        "emphasis_keyword": ""
    }';
    $res = $this->httpRequest($url,$data);
    return [$res,$data];
}

对了,参数form_id有两种具体可以看文档哈,我们这里使用微信支付生成签名返回的prepay_id,access_token是微信用户一开始进小程序获取到存入数据库的,httpRequest( )方法网上也一大把,算了还是给你们吧,帮人帮到底吧,代码如下:

public function httpRequest($url = '', $data = '')
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    if ($data) {
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    $res = curl_exec($ch);
    if (!$res) {
        $data['return_code'] = 'FAIL';
        $data['return_msg'] = 'curl出错,错误码: ' . curl_errorno($ch) . '详情: ' . curl_error($ch);
    } else {
        $data = json_decode($res, true);
    }
    curl_close($ch);
    return $data;
}

大家不用谢啊,嘿嘿~,封装的方法准备好了,我们就在支付成功的回调方法里不是要去更新订单吗,就在那里,对,就那里,因为开团的人就已经生成了订单,但是这两个人在同一个拼团活动里,我们通过这个活动id去查询这两个人的订单信息,然后拿到两个人的openid,prepay_id,和订单的一些信息传到我们封装的发送模板消息方法里,也就是我这里的$temarr数组里的值就是我们要发送的参数,这里要谨记,keyword序号,一定一定一定要按顺序写,从1开始,珊妹儿就在这里犯了错误,导致推送了空数据的模板 (-_-),好啦,重点都说完啦,大家有什么不清晰的地方欢迎留言啊,珊妹儿看到了就会回复滴,期待你们的打扰哈~~~

猜你喜欢

转载自blog.csdn.net/small_33/article/details/88721783