Bootstrap

用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


<?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。在此搭建完成,可以去公众号搜索关键词试试。

如有不明白请看原文详细内容,此文章可能有所删减~~

原文链接:https://www.fang1688.cn/eshop/1171.html

;