WeChat 共有設定と例

WeChatパブリックプラットフォームサーバーの構成

以下は wx_check.php のコードです。このファイルをサーバーのドメイン名の下に新しく作成した [wx_check] フォルダーに置きます。

<?php
define("TOKEN", "你的token(任意字符串,与服务器上相同)");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();


class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }


    public function responseMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)){
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";
                if(!empty( $keyword ))
                {
                      $msgType = "text";
                    $contentStr = "Welcome to wechat world!";
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
                }else{
                    echo "Input something...";
                }
        }else {
            echo "";
            exit;
        }
    }
        
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];    
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}
?>

ここに画像の説明を挿入
フォルダー名とファイル名に wx_ という接頭辞を付けると数秒で認証が通るという奇妙な現象を見つけたので、ここでは名前を wx_xxx としました

WeChatパブリックアカウント共有の開発

開発プロセス

sample.php のサンプル コードを含むWeChat サンプルをダウンロードします。Sample.php を開いて HTML コードを削除し、上記の最後のステップでコードをデータから分離し、サンプルの名前を非常に強力な名前に変更し、親フォルダー [PHP] も変更します。英語を使用するのが最善です。サーバーのドメイン名フォルダーのルート ディレクトリに置き、新しいテスト プロジェクトを作成します。share.png は共有時に表示される画像です。できれば 200*200 ピクセル サイズのtestshare.php がコードです。そして、コードに次のように記述します

ここに画像の説明を挿入


ここに画像の説明を挿入



ここに画像の説明を挿入



ここに画像の説明を挿入

<?php
require_once "../牛逼名字/牛逼名字.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
TEST share
</body>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
    /*
     * 注意:
     * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
     * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
     * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
     *
     * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
     * 邮箱地址:[email protected]
     * 邮件主题:【微信JS-SDK反馈】具体问题
     * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
     */
    wx.config({
        debug: true,
        appId: '<?php echo $signPackage["appId"];?>',
        timestamp: <?php echo $signPackage["timestamp"];?>,
        nonceStr: '<?php echo $signPackage["nonceStr"];?>',
        signature: '<?php echo $signPackage["signature"];?>',
        jsApiList: [
        // 所有要调用的 API 都要加到这个列表中
        'checkJsApi',
        'onMenuShareTimeline',
        'onMenuShareAppMessage'
    ]
    });

    //当前链接地址
    var gameUrl = 'http://你的域名/testshare/testshare.html';
    var imgUrl = 'http://你的域名/testshare/share.png';
    //分享到朋友数据
    var sharedata = {
        title: '分享测试',
        desc: '分享测试,分享测试,分享测试,分享测试,分享测试,分享测试',
        link: gameUrl,
        imgUrl: imgUrl
    };
    //分享到朋友圈数据 默认和分享朋友一样
    var timelinedata = {
        title: "分享测试",
        link: sharedata.link,
        imgUrl: sharedata.imgUrl
    };
    wx.ready(function () {
        //分享朋友圈
        wx.onMenuShareTimeline(timelinedata);
        //分享给朋友
        wx.onMenuShareAppMessage(sharedata);
    });
</script>
</body>
</html>

このファイルをサーバー ドメイン名のルート ディレクトリに配置すると、
ここに画像の説明を挿入
ブラウザがこのファイルにアクセスし、リンクを WeChat に送信します。WeChat を開き、左上隅をクリックして友達と共有したり、モーメントと共有したりできます
ここに画像の説明を挿入
ここに画像の説明を挿入

エラー解決

エラー 1 URL ドメイン

開発プロセス中に、共有できない状況が発生し、エラーが報告されます。

errmsg config;invalid url domain

これは、js セキュリティ ドメイン名が構成されていないためです。

解決

  1. WeChatパブリックプラットフォームをオープンする
    ここに画像の説明を挿入
  2. [設定]を見つけます
    ここに画像の説明を挿入
  3. [機能設定] - [jsインターフェースセキュリティドメイン名] - [設定]を見つけます。
    ここに画像の説明を挿入
  4. 保存
    ここに画像の説明を挿入

エラー 2 40164 無効な IP xxx

errMsg:config :invalid signature

これは不正な署名を促すメッセージです。「デバッグ」をクリックします

解決

アプリIDとシークレットを入力します。この質問が表示されるかどうかを確認してください。その場合は、プロンプトされた IP アドレスを WeChat ホワイトリストに追加する必要があります
ここに画像の説明を挿入
(奇妙なことに、以前からよく使用していましたが、サーバー環境が laragon から phpstudy に変更されたため、この問題が発生しました)

エラー 3 get メソッドは res を取得できません

公式sample.phpのgetメソッドではresが取得できません。
ここに画像の説明を挿入

解決

図のように、検証を検証なしに変更します(trueをfalseに変更した後、ホワイトリストを設定する必要がないという検証すべき問題があります)。
ここに画像の説明を挿入

エラー 4 ファイルが見つかりません

ここに画像の説明を挿入
リンクを開くと、依然として違法な署名が求められます

errMsg:config :invalid signature

解決


ここに画像の説明を挿入
上図のURLが正しく記述されているか、sample.phpのコードを確認してください。
上記でコメントアウトされた URL は、呼び出し時に上の図の 2 つのファイルを自動的に生成しません。プロジェクト project にコピーする必要があります。空にすることはできません。有効なコンテンツが必要です。有効なコンテンツを取得するには、 1. WeChat オンライン デバッグ ツールを使用して対応する値を取得する2. 下図の URL を使用する
2 つの方法があり、これら 2 つのファイルがなくても自動生成できます。このようにファイルができますが、通常は上の図のコメントなしの URL を使用するのが便利でスマートです。


おすすめ

転載: blog.csdn.net/tianxiaojie_blog/article/details/103521947