在当今数字化时代,微信作为一款集社交、支付、生活服务等功能于一体的超级应用,为企业和开发者提供了丰富的生态资源。微信小程序与公众号的结合,更是为企业与用户之间搭建了一座高效沟通的桥梁。通过打通消息模板,不仅可以提升用户体验,还能有效增强用户粘性。本文将详细介绍如何实现微信小程序与公众号的消息模板打通,包括开通配置、技术实现以及实际应用场景。
微信小程序自推出以来,凭借其无需下载、即用即走的特点,迅速获得了大量用户的青睐。而公众号则凭借其内容传播和品牌推广的优势,积累了海量的用户资源。将两者结合,实现消息模板的打通,可以在小程序与公众号之间形成良好的互动,实现用户流量的互导,提升运营效率。
例如,用户在小程序中下单后,可以通过公众号的消息模板及时收到订单状态更新;用户在公众号中关注的内容,也可以通过小程序进行更深入的互动。这种无缝衔接的用户体验,能够有效提升用户对品牌的认同感和忠诚度。
在实现消息模板打通之前,首先需要确保已经开通了微信公众号。如果尚未开通,可以登录微信公众平台(mp.weixin.qq.com),按照平台的指引完成公众号的注册流程。在注册过程中,需要填写相关信息,如公众号名称、功能介绍、头像等,并完成微信认证。
在微信小程序的管理后台,需要将公众号与小程序进行绑定。具体操作步骤如下:
绑定完成后,小程序与公众号之间就可以进行数据交互和消息推送。
为了方便开发和调试,还需要绑定开发者微信号。绑定开发者微信号后,可以在开发过程中接收测试消息和事件推送。具体操作步骤如下:
如果尚未开通微信开发者平台账号,需要先完成注册。登录微信开发者平台(open.weixin.qq.com),按照平台的指引完成注册流程。注册完成后,可以在开发者平台中创建和管理公众号、小程序等项目。
组件实现网页授权在微信小程序中,可以通过
组件加载网页内容。为了实现消息模板的打通,需要通过网页授权获取用户的微信公众号OpenID。具体实现代码如下:
在上述代码中,webAuthUrl
是通过拼接参数生成的网页授权URL。其中,appid
是公众号的AppID,redirect_uri
是回调地址,scope
设置为snsapi_userinfo
表示获取用户信息,state
参数用于传递小程序的OpenID。
当用户授权后,微信会将用户重定向到指定的回调地址,并附带授权的code
和state
参数。在回调地址的服务器端,需要接收这些参数,并通过调用微信的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
方法接收微信回调的code
和state
参数。通过调用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发送请求,完成消息模板的发送。