1. 程式人生 > 實用技巧 >用PHP搭建微信公眾號淘客三合一系統

用PHP搭建微信公眾號淘客三合一系統

用PHP搭建微信公眾號淘客三合一系統

這次小編來講解一下如何在公眾號的搭建淘客三合一系統,php搭建教程接下來會講解

可以參考我上次方包部落格上與大家分享的文章:淘寶京東拼多多三合一淘客系統CMS,PHP原始碼搭建教程

教大家如何在伺服器或虛擬主機搭建三合一cms商城系統,免費搭建教程無私分享給大家!!

首先請大家看看搭建後的效果如下圖 demo:優惠多多公眾號demo:關注公眾號“網購領優惠券”,回覆商品關鍵詞,即可領取優惠券

搭建教程:

1.PHP接入微信公眾號(即php建立與公眾號通訊,並顯示通訊成功才可以)

前提

  • 伺服器資源:你需要擁有一臺公網伺服器資源(阿里雲、騰訊雲或者其他雲資源)
  • 伺服器環境:推薦使用LNMP環境,完美契合PHP開發。(請確保你的伺服器已經成功執行PHP,有不清楚的可以私聊樓主)
  • 公眾號資源:如果沒有公眾號,先去公眾號平臺申請微信公眾平臺。一般個人只能申請訂閱號。
  • 技術要求:掌握一定的程式碼能力即可

開發配置

  • 登入公眾平臺後點擊開發->基本配置
  • 獲取開發者密碼並儲存(請儲存在只有你能看到的地方
  • 新增IP白名單(加上你的伺服器公網IP)
  • 填寫伺服器配置。伺服器地址可以用IP也可以用域名,填寫你的指令碼地址(用於微信接入),token自定義,AESKEY隨機生成即可,訊息方式選安全模式。
  • 當然,以上資訊請儲存到專案裡來呼叫。在這裡先別點提交!

指令碼開發

  • 接下來只要把你在上一步填寫的連結地址中的介面開發完成即可。
  • 可以直接copy程式碼進去。文件說明微信開發文件(文件的demo不是接入的。。)

將下面的demo複製copy到伺服器的根目錄下,注意伺服器必須搭建好php環境,並且是建立新的站點,並且埠號務必是80埠

respond.php

/** * wechat php test */ //define your token define("TOKEN", "weixin"); //此處weixin為上圖紅色字的token值 $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid();
 
class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
 
        //valid signature , option
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }
 
    public function responseMsg()
    {
        //get post data, May be due to the different environments
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 
          //extract 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;
        }
    }
}

大功告成(點選提交會顯示配置成功)

  • 完成上述步驟後,點選提交,就會看到配置成功啦!
  • 可能出現的問題
  • token解析失敗:說明你的介面沒有返回
  • 服務錯誤:你的伺服器可能有問題,嘗試下自己能否訪問介面

如果還是配置失敗,請看這遍文章:https://blog.csdn.net/u012729832/article/details/79754095這裡附上配置表單,我傻逼一開始不知道什麼意思,以為填寫了url 和令牌 就可以成功 誰知道一直出現 ,token驗證失敗的資訊。​後來看了下文件,如下​要返回引數給微信,返回成功則成為開發者;還有記得在公眾號平臺給自己伺服器新增白名單ip,小編之前一直卡在這裡!!! 只要兩個條件就可以驗證成功 一、你的伺服器一定是通的。保證你url是能訪問的。 二、token最好是不要和別人重複的; 所以伺服器上的token要改,要有配置表單上的一樣,他們對應就可以了

大功告成之後請看接來了內容!!

2.php如何利用公眾號搭建三合一淘客系統?

重點來了!首先把原來的respond.php刪掉,在新建一個檔案index.php檔案,把下面程式碼拷貝到伺服器站點根目錄。並且開發者—基本配置—伺服器配置 也要修改伺服器地址,請務必確保伺服器路徑正確!如下圖:

index.php

<?php
header("Content-type: text/html; charset=utf-8"); 
$nonce = $_GET['nonce'];
$token = 'weixin';
$timestamp = $_GET['timestamp'];
if (isset($_GET['echostr'])) {
    if (bindServerCheck()) {
        echo $_GET['echostr'];
    }
    exit();
}
responseMsg();
 //訊息回覆
function responseMsg() {
    //1.獲取到微信推送過來post資料(xml格式)
    $postArr = file_get_contents("php://input");
	
	//libxml_disable_entity_loader(true);
    //2.處理訊息型別,並設定回覆型別和內容
    $postObj = simplexml_load_string($postArr, 'SimpleXMLElement', LIBXML_NOCDATA);
    //判斷該資料包是否是訂閱de事件推送
    if (strtolower($postObj->MsgType) == 'event') {
        //如果是關注 subscribe事件
		
        if (strtolower($postObj->Event) == 'subscribe') {
            $toUser = $postObj->FromUserName;
            $fromUser = $postObj->ToUserName;
            $time = time();
            $msgType = 'text';
            $content = '歡迎關注“網購領優惠券”,若有疑問聯絡微訊號:dafang1688~直接回復訊息,如搜尋關鍵詞:“鉛筆”,即可獲得“鉛筆的優惠券”,或者點選以下網站連結選擇自己喜歡的商品優惠券!
			連結如下:
			<a href="http://www.fang1688.cn:3005">淘寶天貓拼多多京東四合一商城---入口地址</a>
			<a href="http://fbao.yhzu.cn/">淘寶天貓優惠券---入口地址</a>
			<a href="http://www.fang1688.cn:3006">京東優惠券---入口地址</a>
			<a href="https://p.pinduoduo.com/s6Cbmn5Z">拼多多優惠券---入口地址</a>
			<a href="https://i.meituan.com/awp/hfe/block/a945391288b790d558b7/78716/index.html">外賣優惠券---入口地址</a>
			<a href="http://www.fang1688.cn:3008/pay/hongbao.jpg">領取支付寶紅包---入口地址</a>
			<a href="https://p.pinduoduo.com/dzzb98A3">1.9元包郵---入口地址</a>';
			
			
			
 
             //修改為
              if (is_utf8($content)) {
                $content = $content;
              } else {
               $content = iconv('gb2312', 'UTF-8//IGNORE', $content);
              }
			
            $template = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            </xml>";
            $info = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
            echo $info;
        }
		
		
		
		
    }
	
	
	
	    if (strtolower($postObj->MsgType) == 'text') {
        //如果是關注 subscribe事件
		
       // if (strtolower($postObj->Event) == 'subscribe') {
            $toUser = $postObj->FromUserName;
            $fromUser = $postObj->ToUserName;
            $time = time();
            $msgType = 'text';
			$keyword = trim($postObj->Content);
			
			
			
			if ($keyword=='圖片'){
			 
 		 
			 
            $arr = array(  
                array(  
                    'title'=>'微信公眾號',  
                    'description'=>"微信公眾號的官方網站。",  
                    'picUrl'=>'http://wwwmages/logo.jpg',  
                    'url'=>'http://www.baidu.com',  
                ),  
            );    
            $template = "<xml>  
                        <ToUserName><![CDATA[%s]]></ToUserName>  
                        <FromUserName><![CDATA[%s]]></FromUserName>  
                        <CreateTime>%s</CreateTime>  
                        <MsgType><![CDATA[%s]]></MsgType>  
                        <ArticleCount>".count($arr)."</ArticleCount>  
                        <Articles>";  
            foreach($arr as $k=>$v){  
                $template .="<item>  
                            <Title><![CDATA[".$v['title']."]]></Title>   
                            <Description><![CDATA[".$v['description']."]]></Description>  
                            <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl>  
                            <Url><![CDATA[".$v['url']."]]></Url>  
                            </item>";  
            }  
            $template .="</Articles>  
                        </xml> ";  
            echo sprintf($template, $toUser, $fromUser, time(), 'news');  
			
	        }
			
			
			
			
		    if ($keyword=='多圖片'){
			 
			 
			 
			$arr = array();
			$arr[] = array("title"=>"司", "Description"=>"", "picUrl"=>"http://778.jpg", "url" =>"http://51822.html");
			$arr[] = array("title"=>"成", "Description"=>"", "picUrl"=>"http://833_28919.jpg", "url" =>"http://61929.html");
			$arr[] = array("title"=>"辦", "Description"=>"", "picUrl"=>"http://8.jpg", "url" =>"http://161207.html");
			 
			 
             
            $template = "<xml>  
                        <ToUserName><![CDATA[%s]]></ToUserName>  
                        <FromUserName><![CDATA[%s]]></FromUserName>  
                        <CreateTime>%s</CreateTime>  
                        <MsgType><![CDATA[%s]]></MsgType>  
                        <ArticleCount>".count($arr)."</ArticleCount>  
                        <Articles>";  
            foreach($arr as $k=>$v){  
                $template .="<item>  
                            <Title><![CDATA[".$v['title']."]]></Title>   
                            <Description><![CDATA[".$v['description']."]]></Description>  
                            <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl>  
                            <Url><![CDATA[".$v['url']."]]></Url>  
                            </item>";  
            }  
            $template .="</Articles>  
                        </xml> ";  
            echo sprintf($template, $toUser, $fromUser, time(), 'news');  
			
	        }
			
			
			if ($keyword=='小蘋果'){
 
							
  $tetle = '小蘋果';
  $des = '這是一首非常好聽的歌曲';
  $MusicUrl = 'http://g.mp3';
  
  
                  $textTpl = "<xml>
				  <ToUserName>< ![CDATA[%s] ]></ToUserName>
				  <FromUserName>< ![CDATA[%s] ]></FromUserName>
				  <CreateTime>%s</CreateTime>
				  <MsgType>< ![CDATA[music] ]></MsgType>
				  <Music>
				  <Title>< ![CDATA[$tetle] ]></Title>
				  <Description>< ![CDATA[$des] ]></Description>
				  <MusicUrl>< ![CDATA[$MusicUrl] ]></MusicUrl>
				  <HQMusicUrl>< ![CDATA[$MusicUrl] ]></HQMusicUrl>
				  <ThumbMediaId>< ![CDATA[media_id] ]></ThumbMediaId>
				  </Music>
				  </xml>";
                      $msgType = "music";
                 
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time);
                    echo $resultStr;
                 
  
 // $resultStr = sprintf($Musictpl, $fromUsername, $toUsername, $time, $title, $decription, $music_url, $music_url);
 // echo $resultStr;
			
			}
			
			
			
			
			
			
			
            
            $content = 	"<a href='http://www.fang1688.cn:3005//index.php?r=l&kw=$keyword'>$keyword  優惠券</a>";
			
		
			
 
             //修改為
              if (is_utf8($content)) {
                $content = $content;
              } else {
               $content = iconv('gb2312', 'UTF-8//IGNORE', $content);
              }
			
            $template = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            </xml>";
            $info = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
            echo $info;
       // }
		
		
		
		
    }
	
	
	
	
	
	
	
	
}
 
 
// 開發者模式繫結校驗
function bindServerCheck($token) {
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];
    $tmpArr = array(
        $token,
        $timestamp,
        $nonce
    );
    sort($tmpArr);
    $tmpStr = implode($tmpArr);
    $tmpStr = sha1($tmpStr);
    if ($tmpStr == $signature) {
        return true;
    } else {
        return false;
    }
}
 
 
 
 
  function to_utf8($in) 
{ 
        if (is_array($in)) { 
            foreach ($in as $key => $value) { 
                $out[to_utf8($key)] = to_utf8($value); 
            } 
        } elseif(is_string($in)) { 
            if(mb_detect_encoding($in) != "UTF-8") 
                return utf8_encode($in); 
            else 
                return $in; 
        } else { 
            return $in; 
        } 
        return $out; 
} 
 
 
 
 
 function is_utf8($str)
{
  return preg_match('//u', $str);
}
 
 function music($url,$tetle,$des) {
        $MusicUrl=$url;
        $tetle=$tetle;
        $des=$des;
                $textTpl = " <xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                             <Music>
                             <Title><![CDATA[$tetle]]></Title>
                             <Description><![CDATA[$des]]></Description>
                             <MusicUrl><![CDATA[$MusicUrl]]></MusicUrl>
                             <HQMusicUrl><![CDATA[$MusicUrl]]></HQMusicUrl>
                             </Music>
                             <FuncFlag>0</FuncFlag>
                             </xml>";
                      $msgType = "music";
                 
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
					}
 

?>

上面模板內容請參考裡面 我公眾號 demo。在此搭建完成,可以去公眾號搜尋關鍵詞試試。

關注公眾號“優派程式設計”,搜尋關鍵字獲取更多學習資料