专业编程基础技术教程

网站首页 > 基础教程 正文

php 发送微信订阅消息

ccvgpt 2025-01-18 17:50:52 基础教程 11 ℃
<?php

namespace app\api\service;

use app\api\exception\ApiException;
use app\api\traits\Singleton;
use think\Cache;
use think\Log;

/**
 * 微信发送消息
 * Class ExpressService
 * @package app\api\service
 */
class WxMessageService extends BaseService
{
    private $appid = 'xxxxxx'; //填入服务号AppID
    private $appsecret = 'xxxxxxxxxxxxxxx'; //填入服务号AppSecret
    /**
     * @param string $openid 微信用户的openid
     * @param string $template_id 消息的模板id
     * @param array $data 需要的参数,为数组,类型为[key=>value],key为模板中的参数,value为参数的值
     */
    public function sendMessage($openid, $template_id, $data, $page_params=null)
    {
        $access_token_info = $this->getAccessTokenNoCode();
        $access_token = $access_token_info['access_token'];

        //要发送给微信接口的数据
        $send_data = [
            "touser" => $openid,
            "template_id" => $template_id,
        ];

        $demo_data = [];
        foreach($data as $k=>$v){
            $demo_data[$k] = [
                "value" => $v
            ];
        }
        $send_data['data'] = $demo_data;

        if(!empty($page_params)){
            $send_data['page'] = $page_params;
        }

        //print_r($send_data);die;
        $url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=".$access_token;
        $result = $this->curl_post($url,$send_data);//dump($result);exit;
        $result = json_decode($result, true);
        //print_r($result);
        if($result['errcode']==0){
            return true;
        }else{
            return false;
        }
    }



    private function getAccessTokenNoCode()
    {
        $wxAppID = $this->appid;
        $wxAppSecret = $this->appsecret;
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$wxAppID."&secret=".$wxAppSecret;
        $result = $this -> http_request($url);
        $result = json_decode($result, true);
        return $result;
    }

    private function http_request($url,$data=null){
        $curl = curl_init();
        curl_setopt($curl,CURLOPT_URL,$url);
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
        if(!empty($data)){
            curl_setopt($curl,CURLOPT_POST,1);
            curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
        }
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }

    private function curl_post($url, array $params = array())
    {
        $data_string = json_encode($params);//dump($data_string);exit;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt(
            $ch, CURLOPT_HTTPHEADER,
            array(
                'Content-Type: application/json'
            )
        );
        $data = curl_exec($ch);
        curl_close($ch);
        return ($data);
    }
}

Tags:

最近发表
标签列表