您的位置:首页 > 移动开发 > 微信开发

微信公众平台开发费用其实并不高 及微信公众平台开发简单教程

2013-11-21 16:46 344 查看
今天我一朋友问我一个技术上的问题,通过PHP cURL来请求外部接口,接口返回的是一个JSON的字符串,但如果把字符串copy下来然后赋值 给一个变量再将它json_decode是OK的不会有错,可以正常的得到对应的数组。但如果直接返cURL返回的字符串json_decode返回的居 然是NULL,他试了N多办法最终没有搞定,如是就问我要怎么处理。我当时也想了很多办法,后来发现是编码的问题,改成UTF-8的编码就OK了。

   这中间不可避免的谈到了他们的应用场景和需求,发现原来是在做一个微信公众平台的开发,我说你怎么不早找我啊,免得你纠结这么久,好歹我也是在腾讯做架 构师啊,尽管不是在微信部门(我是在上海漕河泾的腾讯,这里没有微信的部门),他说原先他们是找了一家公司做的,后来完成后,想新增一个功能,但那家公司 就狮子大开口增一个功能要4W......我去试了下他们的所谓开发,其实也没什么功能就是做个了用HTML5做的手机站,然后把手机站跟微信公众平台对 接下,然后定制了几个功能,他们就花了8W,我跟我朋友说你们真有钱!你给我做,功能完全一样,我只要一半就够了...微信公众平台开发其实最主要的费用
无非就是服务器费用,域名费用,程序开发,页面设计费用等除了这些费用外,我真想不出其它的费用了,因为申请微信服务号是免费的,只要有一丁点技术基础就 能对接上,所以基本上不会产生其它的费用,总体来说微信公众平台开发的成本其实并不高。

   其实我是想说微信公众平台开发,其实成本真的不高,如果你有一些好的想法,想结合微信公众平台开发出来,你又没技术基础,所以千万不要去找那些所谓的专业微信公众平台开发的公司,90%都是大萝卜坑,不是漫天要价就是夸大微信公众平台开发的难度。

为了让大家对微信公众平台开发进一步的了解,我写个教程,废话不多说了,请往下看:

微信公众平台开发的消息流程如下图



(注:用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过XML完成)

看了以后是不是觉得很简单啊?那接着往下看

第一步,去微信公众平台上申请公众账号,地址是:https://mp.weixin.qq.com/



按上面的要求填写好然后注册



去你填写的那个邮箱里验证一下,完全邮箱验证过程,成功后然后下一步



这里注意下,这里要选组织,在为个人的只能申请订阅号,只有组织的才能申请服务号,订阅号是不能拿到用户发的消息的。你可会有很多疑问,比如为什么要拿到用户的消息啊...后面我们会讲到,所以这里你只要按这个选就好了。

之后就是按要求一一填写,然后等待微信平台审核了。

审核通过后,登录进去你就能看到下面这样的界面


当然这个审核过程可能会要花些时间,所以请稍安勿燥,耐心等候(我是通过内部工牌申请的,所以比较快)。

其它的你先不要管,都比较简单,点点就都能明白了,最主要的就是高级功能这个选项,点进去后



选开发模式,这上面有解释两种模式的差别,所以就不多啰嗦了。进入开发模式后



首先,你要确认开发模式已开启,就是上面图片右上角的开关

其次,你要保证你的接口配置信息的里的URL必须是外网地址,也就是说外网是可以正常访问的。好了,上面的信息都OK后,那你的微信公众平台开发的任务就完成了一大半了。

接着就是对用户发的消息进行解释与回应了,这里你首先要认真的仔细的看下微信公众平台里的消息接口,详见http://mp.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E6%8E%A5...。这里面有你需要的POST到你接口的消息数据格式,以及你回应的数据格式。

同样是在“高级功能”菜单中配置,需要配置两项参数:

URL: 开发者应用访问地址,目前仅支持80端口

TOKEN: 随意填写,用于生成签名,以“xxxx”为例。

填写完把下面代码保存为你上面填写的URL对应的程序文件中,最后点击“提交”完成验证。(我这里用PHP做例子,实际情况请遵行你自己的程序)

<?php

define("TOKEN", "xxxx"); //TOKEN值

$wechatObj = new wechat();

$wechatObj->valid();

class wechat {

    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;

        }

    }

}

?>

这就是微信公众平台校验URL是否正确接入,研究代码没有实质性意义,验证完即可删除文件,就不详细说明了

微信公众平台与开发者之间的数据交互是通过XML完成的,既然用到XML,当然得遵循规范,所以在着手开发之前先看看官方接口文档提供的XML规范,以文本消息为例:

 

当用户向微信公众账号发送消息时,微信服务器会POST给开发者一些数据:

<xml>

<!--开发者微信号-->

<ToUserName><![CDATA[toUser]]></ToUserName>

<!--发送方帐号(OpenID)-->

<FromUserName><![CDATA[fromUser]]></FromUserName> 

<!--消息创建时间 (整型)-->

<CreateTime>12345678</CreateTime>

<!--消息类别 (text文本消息)-->

<MsgType><![CDATA[text]]></MsgType>

<!--消息内容-->

<Content><![CDATA[content]]></Content>

<!--消息ID (64位整型)-->

<MsgId>1234567890123456</MsgId>

</xml>

开发者在处理完消息后需要返回数据给微信服务器:

<xml>

<!--接收方帐号(OpenID)-->

<ToUserName><![CDATA[toUser]]></ToUserName>

<!--开发者微信号-->

<FromUserName><![CDATA[fromUser]]></FromUserName>

<!--消息创建时间 (整型)-->

<CreateTime>12345678</CreateTime>

<!--消息类别 (text文本消息)-->

<MsgType><![CDATA[text]]></MsgType>

<!--回复消息内容-->

<Content><![CDATA[content]]></Content>

<!--星标操作(位0x0001被标志时 星标刚收到的消息)-->

<FuncFlag>0</FuncFlag>

</xml>

除文本消息外,微信公众平台还支持用户发送图片消息、地理位置消息、链接消息、事件推送,而开发者还可以向微信公众平台回复音乐消息和图文消息,各类消息XML规范也可以参见官方文档。

来看看官方提供的一个PHP示例,我做了一些精简:

<?php

$wechatObj = new wechat();

$wechatObj->responseMsg();

class wechat {

    public function responseMsg() {

        //---------- 接 收 数 据 ---------- //

        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据

        //用SimpleXML解析POST过来的XML数据

        $postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);

        $fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID)

        $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>";

        $msgType = "text"; //消息类型

        $contentStr = 'hello world~ http://blog.shanglema.com'; //返回消息内容

        //格式化消息模板

        $resultStr = sprintf($textTpl,$fromUsername,$toUsername,

        $time,$msgType,$contentStr);

        echo $resultStr; //输出结果

    }

}

把上面的代码上传到接口配置信息的URL对应的程序文件上,一个微信公众平台自动回复消息的功能就完成了。是不是觉得特没技术含量,是不是觉得特简单?事实就是这样,只要你了解了一切就是这么水到渠成。

好了,微信公众平台开发的简单教程就写到这里吧,我这里有一个PHP的收发消息的类,如果有需要的朋友可以邮件我,我可以发你参考下。地址是:peng.zhan##qq.com (## -> @),当然有任何问题,你也可以不耻下问,我很乐意跟大家一起分享。

本文原创,如想转载请注明出处。

本文链接地址为:http://blog.shanglema.com/open-weixin-platform-development
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: