用php搭建微信公众号淘客三合一系统
目录
这次小编来讲解一下如何在公众号的搭建淘客三合一系统,php搭建教程接下来会讲解。
在公众号搭建前首先准备三合一cms商城系统可以参考我的商城系统demo:https://www.fang1688.cn/eshop/1091.html
可以参考我上次方包博客上与大家分享的文章:淘宝京东拼多多三合一淘客系统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");
$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。在此搭建完成,可以去公众号搜索关键词试试。