微信接口示例

<?php

define("TOKEN", "mzh");        //换成你的token
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET[‘echostr‘])) {     //验证微信
    $wechatObj->valid();
}else{                     //回复消息
    $wechatObj->responseMsg();
}

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            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;
        }
    }

    //回复消息
    public function responseMsg()
  {
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    if (!empty($postStr)){
        $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
        $RX_TYPE = trim($postObj->MsgType);

        switch ($RX_TYPE)
        {
            case "text":
                $resultStr = $this->receiveText($postObj);
                break;
            case "image":
                $resultStr = $this->receiveImage($postObj);
                break;
            case "location":
                $resultStr = $this->receiveLocation($postObj);
                break;
            case "voice":
                $resultStr = $this->receiveVoice($postObj);
                break;
            case "video":
                $resultStr = $this->receiveVideo($postObj);
                break;
            case "link":
                $resultStr = $this->receiveLink($postObj);
                break;
            case "event":
                $resultStr = $this->receiveEvent($postObj);
                break;
            default:
                $resultStr = "unknow msg type: ".$RX_TYPE;
                break;
        }
        echo $resultStr;
    }else {
        echo "";
        exit;
    }
  }

    //接收文本消息
    private function receiveText($object)
    {
        $keyword = trim($object->Content);
        $url = "http://api100.duapp.com/movie/?appkey=DIY_miaomiao&name=".$keyword;
        $output = file_get_contents($url,$keyword);
        $contentStr = json_decode($output, true);
        if (is_array($contentStr)){
            $resultStr = $this->transmitNews($object, $contentStr);
        }else{
            $resultStr = $this->transmitText($object, $contentStr);
        }
        return $resultStr;
    }

    //接收事件,关注等
    private function receiveEvent($object)
    {
        $contentStr = "";
        switch ($object->Event)
        {
            case "subscribe":
                $contentStr = "你关注了我";    //关注后回复内容
                break;
            case "unsubscribe":
                $contentStr = "";
                break;
            case "CLICK":
                $contentStr =  $this->receiveClick($object);    //点击事件
                break;
            default:
                $contentStr = "receive a new event: ".$object->Event;
                break;
        }

        return $contentStr;
    }

    //接收图片
    private function receiveImage($object)
    {
        $contentStr = "你发送的是图片,地址为:".$object->PicUrl;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }

    //接收语音
    private function receiveVoice($object)
    {
        $contentStr = "你发送的是语音,媒体ID为:".$object->MediaId;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }

    //接收视频
    private function receiveVideo($object)
    {
        $contentStr = "你发送的是视频,媒体ID为:".$object->MediaId;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }

    //位置消息
    private function receiveLocation($object)
    {
        $contentStr = "你发送的是位置,纬度为:".$object->Location_X.";经度为:".$object->Location_Y.";缩放级别为:".$object->Scale.";位置为:".$object->Label;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }

    //链接消息
    private function receiveLink($object)
    {
        $contentStr = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }

   //点击菜单消息
    private function receiveClick($object)
    {
         switch ($object->EventKey)
         {
             case "1":
             $contentStr = "猫咪酱个性DIY服装,
我们专业定制个性【班服,情侣装,亲子装等,有长短T恤,卫衣,长短裤】
来图印制即可,给你温馨可爱的TA,
有事可直接留言微信";
             break;

             case "2":

             $contentStr = "你点击了菜单: ".$object->EventKey;
             break;

             case "3":
             $contentStr = "是傻逼";
             break;

             default:
             $contentStr = "你点击了菜单: ".$object->EventKey;
             break;
         }

        //两种回复
        if (is_array($contentStr)){
            $resultStr = $this->transmitNews($object, $contentStr);
        }else{
            $resultStr = $this->transmitText($object, $contentStr);
        }
        return  $resultStr;
    }

    //回复文本消息
    private function transmitText($object, $content)
    {
        $textTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[text]]></MsgType>
        <Content><![CDATA[%s]]></Content>
        </xml>";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
        return $resultStr;
    }    

    //回复图文
    private function transmitNews($object, $arr_item)
    {
        if(!is_array($arr_item))
            return;
        $itemTpl = "    <item>
        <Title><![CDATA[%s]]></Title>
        <Description><![CDATA[%s]]></Description>
        <PicUrl><![CDATA[%s]]></PicUrl>
        <Url><![CDATA[%s]]></Url>
     </item>";
        $item_str = "";
        foreach ($arr_item as $item)
            $item_str .= sprintf($itemTpl, $item[‘Title‘], $item[‘Description‘], $item[‘PicUrl‘], $item[‘Url‘]);
       $newsTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[news]]></MsgType>
        <Content><![CDATA[]]></Content>
        <ArticleCount>%s</ArticleCount>
        <Articles>
        $item_str</Articles>
        </xml>";
        $resultStr = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item));
        return $resultStr;
    }

    //音乐消息
    private function transmitMusic($object, $musicArray, $flag = 0)
    {
        $itemTpl = "<Music>
        <Title><![CDATA[%s]]></Title>
        <Description><![CDATA[%s]]></Description>
        <MusicUrl><![CDATA[%s]]></MusicUrl>
        <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
        </Music>";
        $item_str = sprintf($itemTpl, $musicArray[‘Title‘], $musicArray[‘Description‘], $musicArray[‘MusicUrl‘], $musicArray[‘HQMusicUrl‘]);
        $textTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[music]]></MsgType>
        $item_str
        <FuncFlag>%d</FuncFlag>
        </xml>";
       $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $flag);
        return $resultStr;
    }
}
?>
				
时间: 2024-12-19 10:07:15

微信接口示例的相关文章

微信js-sdk开发获取签名和获取地理位置接口示例

### 微信js-sdk开发获取签名和获取地理位置接口示例 前言:在做微信公众号开发时需要获取用户的地理位置信息,之前通过高德或者百度.腾讯等地图的api时发现经常获取不到,毕竟第三方的东西,后来改为采用微信内置的js-sdk中的获取地理位置接口,在这主要记录下签名的获取(麻烦点)和一个获取地理位置的例子. 准备工作: 微信测试号appid和appsecret 获取地址:微信测试账号获取 在测试账号里先填写接口配置信息和js接口安全域名(这个是必须的) 示例:页面中需要点击图标获取地理位置信息

Force.com - 微信接口后台开发与配置

为寻找国内免费云资源作为微信后台,花了一天时间试用SinaAppEngine(SAE),调试太不方便用户体验差.新浪作为媒体公司技术功底经不起考验,亚马逊能推出AWS,新浪还不行!更好选项是百度BaiduAppEngine(BAE),但最近尽然开始收费,还是安心回到force.com,至少老外承诺免费的东西一直免费且可靠. 第一步,申请force.com账号,请至developer.force.com申请,如是www.salesforce.com申请下来的是作为客户的账号,不适合开发人员:第二步

微信接口开发之前准备工作

我是一名.net码农,最近项目需要用到微信接口开发,苦于微信官方没有.net示例,个人表示非常无解微信竟然这么无视.net的存在(让我哭会) .难道做为.net就不能开发好微信接口了吗?反问了一下,上网查了查资料,答案是否定的,也有许多大神提供很好的例子.在这里谢谢各位前辈的辛苦了(膜拜).在此,我也开始踏入了微信接口开发的工作中了,也想学习大神们的无私,特此在这里共享出我的点点滴滴,与码友一同成长. 先说说我的开发前准备吧! 1.申请注册一个公众平台(哈哈,这是必须的),如果你想要有更大更厉害

java微信接口之五—消息分组群发

一.微信消息分组群发接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN   其中ACCESS_TOKEN是我们动态获取的.   发送的数据:(这里使用图文消息示例) { "filter":{ "group_id":"2" }, "mpnews":{ "me

RestTemplate 微信接口 text/plain HttpMessageConverter

一.背景介绍 使用 Spring Boot 写项目,需要用到微信接口获取用户信息. 在 Jessey 和 Spring RestTemplate 两个 Rest 客户端中,想到尽量不引入更多的东西,然后就选择了 Spring RestTemplate 作为 网络请求的 Client,然后就被微信接口摆了一道,然后踩了一个 RestTemplate 的坑. 二.第一个坑:被微信摆了一道 报错信息是: org.springframework.web.client.RestClientExceptio

微信接口校验

1.Servlet package com.itmayiedu.servlet; import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import java.util.Map; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Http

ecshop微信接口基础认识

ecshop微信接口基础认识,当你要学习ecshop和微信整合的时候,你就必须研究ecshop的数据结构对接以及微信数据接口的基本知识.我们知道微信其实就是通过有效的消息推送,用JSON格式的数据或者是XML格式的数据,推送到你的api上面去显示,其实就是一段XML内容.消息推送的话. ecshop和微信对接的基础接口,就是只是包含简单的消息推送接口,以及操作界面的界面定义接口,其他相关关注接口.都需要开通高级接口,论证接口才能做.发送任何消息之前,必须获取token以及验证access_tok

php中创建和调用webservice接口示例

这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservice客户端例子,需要的朋友可以参考下 作为开发者来讲,要想写webservice接口或者调用别人的webservice接口,首先需要了解什么是webservice.简单说, WebService就是一些站点开放一些服务出来, 也可以是你自己开发的Service, 也就是一些方法, 通过URL,指定某一个方法名,发出请求,站点里的这个服务(方法),接到

JAVA接口示例

总感觉有点虚,但慢慢找到感觉了.将对象放进数组里,这就比较深入了. interface drawTest{ public void draw(); public void doAnyThing(); } class ParallelogramUserInterface extends QuadrangleUserInterface implements drawTest{ public void draw(){ System.out.println("Parallelogram.draw()&q