微信公众号开发


layout: post
title: "微信公众号开发"
date: 2016-04-25 14:19:37 +0800
comments: true
categories: [PHP,Weixin]


微信公众号开发

上星期突然突发奇想,想弄个微信公众号来玩。然后再网上找了一些教程过就开始了。


一、前期准备

1.1一个微信公众号

1.2SAE 用来放你的代码


二、开始开发

2.1公众号的分类

公众号分为服务号,订阅号,和企业号三种
简单的来说:
订阅号:你关注了过后会放进订阅号那个分类里的一些列号,每天能推送消息但是不能主动给你发消息(除非你在某个时间段内给它发了消息)
服务号:关注了过后和你的微信好友是在同级的,它可以给你发消息。
企业号:微信的新儿子,主要客户是面向企业。
我们这里主要说订阅号,订阅号又会分为几种,每种订阅号的API接口调用权限也是不同的。

2.2SAE

在申请好SAE后,进入到控制台,创建新应用输入二级域名等一些列信息过后,运行环境选择你对应的开发语言,我选择的是PHP5.3然后选择空应用,创建。
回到控制台,你会看到你刚刚新建的应用,点进去过后选择代码管理,你可以看到你的GIT仓库地址,之后你把你的代码push到这个仓库就可以了。

2.3下载官方接口程序文件

在微信公众平台左侧找到开发->开发者工具->进入开发者文档->开始开发->接入指南->第二步最后有一个PHP实例代码下载。将它下载下来。

2.4公众号的配置

在申请完公众号后,登陆过后在管理页面的左边功能里有群发功能,自动回复等,这些操作是不需要涉及到代码的,我们不再多讲,我们主要讲的是开发者模式下的开发。
首先,在左侧菜单最后找到开发->基本配置->启用服务器配置->分别填写URL,Token,EncodingAESKey。其中URL就是你在SAE控制台应用名字下面那个URL http://xxx.applinzi.com Token 在你下载的代码中去找(默认为weixin,你也可以自己修改,只要他们保持一致即可。)EncodingAESKey选择随机生成即可。消息加解密方式,默认就行。提交过后我们的公众号就配置好了。

2.5 Hello World !程序测试

<?php
/**
  * wechat php test
  */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if($_GET['echostr'])
{
    $wechatObj->valid();
}else
{
    $wechatObj->responseMsg();
}



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 = "<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 ))//判断用户发送的信息不为空则回复Hello Wordld!
                {
                    $msgType = "text";
                    $contentStr = "Hello 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;
        }
    }
}

?>
将代码push到SAE上过后,给公众号发任意消息就能收到HelloWorld!回复。

实现了HelloWorld!实例,还有很多的回复图文,根据关键字实现多客服接入,以及一些其他的API功能调用,这些都可以参考官方的开发者文档。

三、进阶知识

3.1公众平台测试账号

由于我们自己的订阅号很多API不能使用,就需要通过测试账号(可以调用所有的API)来调用其他API

3.2access_token

公众号的全局唯一票据,公众号调用各接口时都需要使用access_token

3.3网页授权接口

通过网页授权接口来获取用户的openID(用户关注某一个公众号的唯一标示,且关注不同的公众号openid是不同的)和基本信息。

3.4JSSDK

可在网页中调用手机拍照,语言,选图等系统功能。

3.5模板消息

模板消息可以主动给用户发送信息并且不受时间限制

除了以上功能外,微信公众平台还有很多的API接口可以调用,用以实现不同的功能,但是基本常用的API在开发文档上都有详细的教程,或者到baidu API 去检索你需要的功能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容

  • title: 微信公众号开发:获取openId和用户信息 tags: 微信公众号 categories: 笔记 ...
    行径行阅读 140,196评论 5 63
  • 一、公众号介绍 微信公众号分类 订阅号:主要偏于为用户传达资讯(类似报纸杂志),认证前后都是每天只可以群发一条消息...
    小花的胖次阅读 6,399评论 3 37
  • 开发前首先我们要知道一些概念 各公众号区别:1、订阅号:为媒体和个人提供一种信息传播方式,主要偏于为用户传达资讯(...
    CoderZS阅读 3,183评论 1 19
  • 前阵子写了篇入坑指南,介绍了下开发微信公众号的基本流程。最近又捣鼓了一阵,发现这开发工具的选择对于提高开发效率真是...
    郗南枫阅读 8,333评论 0 18
  • 又一次路过郧阳中学的门口,每当我经过这里,看到这里熟悉的一草一木,总能让我想起他。 报完名通知所有人晚...
    小黄豆不爱吃辣阅读 454评论 0 0