Maison  >  Article  >  développement back-end  >  Créer un partage personnalisé WeChat avec PHP

Créer un partage personnalisé WeChat avec PHP

XuPing.Yang
XuPing.Yangoriginal
2021-08-16 09:30:162750parcourir

Récemment, j'ai rencontré un projet alors que je travaillais sur un projet. Lors du partage d'articles via WeChat, j'avais besoin d'afficher le titre du partage, le résumé du partage et le partage des images selon mes propres besoins. J'ai trouvé de nombreuses façons en ligne et j'ai finalement adopté WeChat. Plateforme publique. Fonction d'interface de partage intégrée.

Pour que la fonction de partage de l'interface WeChat fonctionne, vous devez créer un compte public dès le début et passer la certification. Ce n'est qu'ainsi que la production de l'interface pourra être réalisée. Je ne donnerai pas d'instructions détaillées sur l'enregistrement WeChat ici. Vous pouvez le rechercher directement sur le site officiel de la plateforme publique WeChat : mp.weixin.qq.com

Maintenant, je vais vous donner une introduction étape par étape

1. Configuration des informations de développement du compte public

Avant de développer l'interface de partage, vous devez configurer les informations de configuration de la plateforme publique, comme indiqué dans la figure ci-dessous : Cliquez sur « Développement-Informations de base » pour voir les informations de développement du compte public. Cliquez sur "Ouvrir" à l'endroit où la clé secrète du développeur doit être configurée. Une fois la configuration réussie, enregistrez l'ID du développeur (AppID) et le mot de passe du développeur (AppSecret)

Créer un partage personnalisé WeChat avec PHP

2. Configurez le nom de domaine de sécurité de l'interface JS

. Cliquez sur "Paramètres et développement - Paramètres du compte officiel", cliquez sur les paramètres derrière le nom de domaine de sécurité de l'interface JS et ajoutez le nom de domaine de sécurité js si nécessaire, comme indiqué dans l'image

Classe d'interface de partage PHP

.

Pas grand chose à dire ici, allez simplement dans le code

class wechatClass
{
    public $AppID;
    public $AppSecret;
    public $redirect_uri;
    public $DbSy;
    public $dump_url;
    public $scope;
    public function __construct()
    {
        parent::__construct();
        $this->AppID = "开发者密码(AppSecret)";
        $this->AppSecret = "开发者密码(AppSecret)";
    }
    public function getSignPackage() {
        $jsapiTicket = $this->getJsApiTicket();
        // 注意 URL 一定要动态获取,不能 hardcode.
        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $url = "{$protocol}{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
        $timestamp = time();
        $nonceStr = $this->createNonceStr();
        // 这里参数的顺序要按照 key 值 ASCII 码升序排序
        $string = "jsapi_ticket={$jsapiTicket}&noncestr={$nonceStr}&timestamp={$timestamp}&url={$url}";
        $signature = sha1($string);
        // var_dump($signature);die;
        $signPackage = array(
            "appId"     => $this->AppID,
            "nonceStr"  => $nonceStr,
            "timestamp" => $timestamp,
            "url"       => $url,
            "signature" => $signature,
            "rawString" => $string
        );
        return $signPackage;
    }
    public function createNonceStr($length = 16) {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $str = "";
        for ($i = 0; $i < $length; $i++) {
            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $str;
    }
    public function getJsApiTicket() {
        // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
        //echo $_SERVER[&#39;DOCUMENT_ROOT&#39;];
        $data = json_decode(file_get_contents($_SERVER[&#39;DOCUMENT_ROOT&#39;]."/static/yejuzhi/js/access_token.json"));
        // var_dump($data->expire_time);die;
        if ($data->expire_time < time()) {
            $accessToken = $this->getAccessToken();
            // 如果是企业号用以下 URL 获取 ticket
            // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token={$accessToken}";
            $res = json_decode($this->httpGet($url));
            $ticket = $res->ticket;
            if ($ticket) {
                $data->expire_time = time() + 7000;
                $data->jsapi_ticket = $ticket;
                $fp = fopen($_SERVER[&#39;DOCUMENT_ROOT&#39;]."/static/yejuzhi/js/access_token.json", "w");
                fwrite($fp, json_encode($data));
                fclose($fp);
            }
        } else {
            $ticket = $data->jsapi_ticket;
        }
        return $ticket;
    }
    public function getAccessToken() {
        // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
        $data = json_decode(file_get_contents($_SERVER[&#39;DOCUMENT_ROOT&#39;]."/static/yejuzhi/js/access_token.json"));
        if ($data->expire_time < time()) {
            // 如果是企业号用以下URL获取access_token
            // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->AppID}&secret={$this->AppSecret}";
            $res = json_decode($this->httpGet($url));
            $access_token = $res->access_token;
            if ($access_token) {
                $data->expire_time = time() + 7000;
                $data->access_token = $access_token;
                $fp = fopen($_SERVER[&#39;DOCUMENT_ROOT&#39;]."/static/yejuzhi/js/access_token.json", "w");
                fwrite($fp, json_encode($data));
                fclose($fp);
            }
        } else {
            $access_token = $data->access_token;
        }
        return $access_token;
    }
    public function httpGet($url){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_URL, $url);
        $res = curl_exec($curl);
        curl_close($curl);
        return $res;
    }
}

4. Configuration du fichier PHP

Je l'ai écrit sur la base du framework TP5.1 Vous pouvez le configurer vous-même

$wx = new WeChatClass();
$sign = $wx->getSignPackage();
$this->assign(&#39;sign&#39;,$sign);

5. Code HTML

Veuillez vous référer à la documentation de développement pour le code HTML front-end :https://developers.weixin.qq.com /doc/offiaccount/OA_Web_Apps/JS-SDK.html#111

Ici, je prenez comme exemple l'interface de partage de contenu des boutons « Partager avec des amis » et « Partager sur QQ » (1.4.0) personnalisée

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>微信分享接口制作</title>
</head>
<body>
<script src="http://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
 wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
 appId: &#39;{$sign.appId}&#39;, // 必填,公众号的唯一标识
 timestamp: &#39;{$sign.timestamp}&#39;, // 必填,生成签名的时间戳
 nonceStr: &#39;{$sign.nonceStr}&#39;, // 必填,生成签名的随机串
 signature: &#39;{$sign.signature}&#39;,// 必填,签名
 jsApiList: [
            "updateAppMessageShareData",] // 必填,需要使用的JS接口列表
 });
 wx.ready(function () {
        wx.updateAppMessageShareData({
            title: &#39;您的标题&#39;, // 分享标题
 desc: &#39;您的描述&#39;, // 分享描述
 link: &#39;您的分享链接&#39;, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
 imgUrl: &#39;您的分享图标&#39;, // 分享图标
 success: function () {
                /*alert(&#39;成功&#39;);*/
 }
        });
 });
</script>
</body>
</html>


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn