微信小程序与公众号消息模板打通的实现与应用

在当今数字化时代,微信作为一款集社交、支付、生活服务等功能于一体的超级应用,为企业和开发者提供了丰富的生态资源。微信小程序与公众号的结合,更是为企业与用户之间搭建了一座高效沟通的桥梁。通过打通消息模板,不仅可以提升用户体验,还能有效增强用户粘性。本文将详细介绍如何实现微信小程序与公众号的消息模板打通,包括开通配置、技术实现以及实际应用场景。

一、背景与意义

微信小程序自推出以来,凭借其无需下载、即用即走的特点,迅速获得了大量用户的青睐。而公众号则凭借其内容传播和品牌推广的优势,积累了海量的用户资源。将两者结合,实现消息模板的打通,可以在小程序与公众号之间形成良好的互动,实现用户流量的互导,提升运营效率。

例如,用户在小程序中下单后,可以通过公众号的消息模板及时收到订单状态更新;用户在公众号中关注的内容,也可以通过小程序进行更深入的互动。这种无缝衔接的用户体验,能够有效提升用户对品牌的认同感和忠诚度。

二、开通与配置

(一)开通公众号

在实现消息模板打通之前,首先需要确保已经开通了微信公众号。如果尚未开通,可以登录微信公众平台(mp.weixin.qq.com),按照平台的指引完成公众号的注册流程。在注册过程中,需要填写相关信息,如公众号名称、功能介绍、头像等,并完成微信认证。

(二)绑定公众号

在微信小程序的管理后台,需要将公众号与小程序进行绑定。具体操作步骤如下:

  1. 登录微信小程序管理后台(mp.weixin.qq.com)。
  2. 在左侧菜单栏中选择“设置”>“公众号设置”。
  3. 点击“添加公众号”,输入公众号的AppID,完成绑定操作。

绑定完成后,小程序与公众号之间就可以进行数据交互和消息推送。

(三)绑定开发者微信号

为了方便开发和调试,还需要绑定开发者微信号。绑定开发者微信号后,可以在开发过程中接收测试消息和事件推送。具体操作步骤如下:

  1. 登录微信公众平台(mp.weixin.qq.com)。
  2. 在左侧菜单栏中选择“设置”>“功能设置”。
  3. 在“公众号开发者微信号”一栏中,输入需要绑定的微信号,点击“保存”按钮。

(四)申通微信开发者平台,开通公众号

如果尚未开通微信开发者平台账号,需要先完成注册。登录微信开发者平台(open.weixin.qq.com),按照平台的指引完成注册流程。注册完成后,可以在开发者平台中创建和管理公众号、小程序等项目。

三、技术实现

(一)使用组件实现网页授权

在微信小程序中,可以通过组件加载网页内容。为了实现消息模板的打通,需要通过网页授权获取用户的微信公众号OpenID。具体实现代码如下:




在上述代码中,webAuthUrl是通过拼接参数生成的网页授权URL。其中,appid是公众号的AppID,redirect_uri是回调地址,scope设置为snsapi_userinfo表示获取用户信息,state参数用于传递小程序的OpenID。

(二)回调地址的实现

当用户授权后,微信会将用户重定向到指定的回调地址,并附带授权的codestate参数。在回调地址的服务器端,需要接收这些参数,并通过调用微信的API获取用户的微信公众号OpenID。以下是回调地址的实现代码:


use App\Models\User;

class WechatController extends Controller
{
    public function callback(Request $request)
    {
        $r = $request->all();
        $code = $r['code'];
        $mini_openid = $r['state']; // 小程序OpenID
        $web_openid2 = User::query()->where('openid', $mini_openid)->value('web_openid2');//web_openid2 找出微信的公众号
        if (!$web_openid2) {
            $result = $this->getOfficialAccountOpenId($code);
            User::query()->where('openid', $mini_openid)->update(['web_openid2' => $result['openid']]);
        }
        // 返回响应
    }

    public function getOfficialAccountOpenId($code)
    {
        $appid = env('WECHAT_OFFICIAL_ACCOUNT_APP_ID');
        $secret = env('WECHAT_OFFICIAL_ACCOUNT_APP_SECRET');
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$secret}&code={$code}&grant_type=authorization_code";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $response = curl_exec($ch);
        if (curl_errno($ch)) {
            echo 'Curl error: ' . curl_error($ch);
        }
        curl_close($ch);
        $result = json_decode($response, true);
        return $result;
    }
}

在上述代码中,callback方法接收微信回调的codestate参数。通过调用getOfficialAccountOpenId方法,使用code向微信API请求获取用户的微信公众号OpenID。如果用户在数据库中尚未绑定微信公众号OpenID,则将其绑定到对应的用户记录中。

(三)消息模板的发送

在获取到用户的微信公众号OpenID后,就可以通过微信公众号的消息模板发送通知给用户。以下是发送消息模板的代码示例:

public function sendTemplateMessage($openid, $templateId, $data, $url = '')
{
    $appid = env('WECHAT_OFFICIAL_ACCOUNT_APP_ID');
    $secret = env('WECHAT_OFFICIAL_ACCOUNT_APP_SECRET');
    $access_token = $this->getAccessToken($appid, $secret);
    $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$access_token}";
    $message = [
        'touser' => $openid,
        'template_id' => $templateId,
        'data' => $data,
        'url' => $url
    ];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Curl error: ' . curl_error($ch);
    }
    curl_close($ch);
    $result = json_decode($response, true);
    return $result;
}

public function getAccessToken($appid, $secret)
{
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Curl error: ' . curl_error($ch);
    }
    curl_close($ch);
    $result = json_decode($response, true);
    return $result['access_token'];
}

在上述代码中,sendTemplateMessage方法用于发送消息模板。首先通过getAccessToken方法获取微信公众号的access_token,然后构造消息模板的请求参数,包括用户的OpenID、模板ID、模板数据和跳转链接。最后通过CURL向微信API发送请求,完成消息模板的发送。

你可能感兴趣的:(微信小程序开发,微信小程序,微信公众号)