微信接入真的怎么麻烦吗?今天终于有答案了,分享

#1 fannaoshaoxiang


论坛里面有微信接入的案例,我试了一下,没有成功。无语。

我就在想,难道SP真的就怎么没有用,这一点点的兼容性都没有办法弄好吗?

我就翻找帮助,几天下来终于有了结果。原来,SP是非常的强大的框架,关键一定要好好看帮助。虽然有时候很吃力,但是必须坚持。

SP帮助里面有一个非常强大的 类 spClass ,帮助里面关于这个类解释的很清楚。但是却把我绕进去。我最初的想法是改写微信官方的php案例,发现,能力不到家。

那SP就真的没有什么用了吗。其实还有一个类 import 类这个类才是核心的核心。有了这个类。就真的无所不能了。

其实代码就怎么简单,微信就接入进来了。接入进来后,接下来干什么 很简单了 就是用 SP自己带的 GET POST 获取就OK了。


class weixin extends spController
{
        function index() //普通用户主页
        {
                import('model/wx_sample.php');
                $weixin = spClass('wechatCallbackapiTest');
                $weixin->valid();
        }
}

在 htdocs 文件夹下的 controller 文件夹下 建立一个 weixin.php 的文件 拷贝上面的代码
到微信的官方微信下载官方的案例
我贴出来,方便大家,在 model 文件夹下 创建一个 wx_sample.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)){
                /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
                   the best way is to check the validity of xml by yourself */
                libxml_disable_entity_loader(true);
                      $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "
                                                       
                                                       
                                                        %s
                                                       
                                                       
                                                        0
                                                       
";            
                                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()
        {
        // you must define TOKEN by yourself
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }

        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
                       
                $token = TOKEN;
                $tmpArr = array($token, $timestamp, $nonce);
        // use SORT_STRING rule
                sort($tmpArr, SORT_STRING);
                $tmpStr = implode( $tmpArr );
                $tmpStr = sha1( $tmpStr );
               
                if( $tmpStr == $signature ){
                        return true;
                }else{
                        return false;
                }
        }
}

?>


2014-11-12 17:41:19

#2 7666345

顶,谢谢分享!!!!

2014-11-13 10:42:00

#3 shijian0417

谢谢分享!

2015-04-15 13:38:14

#4 刺鸟9527

哥们,微信怎么能够关注之后就能播放视频呀,不用点击一下才能播放。

2015-06-25 19:04:00