您的位置:首页 > 产品设计 > UI/UE

基于 IBM Bluemix 开发微信公共账号应用

2016-08-02 20:40 316 查看


基于 IBM Bluemix 开发微信公共账号应用

IBM 最近发布了 Bluemix,这是一个基于开放标准的平台即服务
(PaaS) 环境,用于在云中构建、运行和管理 Web 和移动应用程序。而微信公共平台的账号已经达到了 200 多万,因此如果能利用 Bluemix 开发微信公共平台应用,笔者认为将为广大的微信开发者学习、部署、测试、直至形成商业应用带来福音,所以笔者通过研究,成功完成了基于 Bluemix 的微信公共平台应用开发,在此做一些简要的介绍,以便于微信公共开发者推进深化应用。


基本过程

在开发微信公众平台前,需要申请一个微信公共账号,此处不做赘述,笔者使用的微信公共账号名称为:"正海说知识创新",代号为:"zhszscx"。如何申请微信公共账号,笔者不做赘述。

在 Bluemix 中开发微信公众平台主要包括如下步骤:

申请 Bluemix 账号

下载并安装 Cloud Foundry 程序

编制一个应用的配置文件

在微信公众平台设置为开发模式

设置一个基于 Bluemix 的网址 URL

设置微信公众平台应用的令牌(Token)

下载微信公众平台的范例程序,笔者采用 PHP 语言,对该程序进行修改,设置令牌(TOKEN)

上传(push)PHP 文件,应用开始执行

在微信公众平台中,验证通过编辑模式。

利用手机微信,向微信公众平台发送信息,获得微信公众平台返回的信息。

至此,基于 Bluemix 的微信公众平台应用开发顺利完成,开发者可以在此基础上进行进一步的发展。

图 1.系统框架




过程描述

申请 Bluemix 账号

进入网址:www.bluemix.net

图 2




下载并安装 Cloud Foundry 程序

进入网址:https://github.com/Cloud Foundry/cli

图 3




根据开发者的程序操作系统下载对应的程序。

图 4




例如笔者下载地址是: Stable Installers 下的"Windows 64 bit"

下载了一个文件,该文件为 installer-windows-amd64 .zip

安装该文件后,在 C:\Program Files (x86)\Cloud Foundry 下产生了一个 cf.exe 文件。同时经过检查发现,在系统的 PATH 路径中,也增加了该目录,也就是说可以直接在 DOS COMMAND 环境下输入 CF 命令执行该文件。

编制一个应用的配置文件

文件名为:manifest.yml 作为一个应用,需要设置应用的名称、应用产生的网址,范例的文件为:

---
applications:
- name: cf-php-mysql1
memory: 256M
instances: 1
host: lzhfirstphp
domain: ng.bluemix.net
path: .
buildpack: https://github.com/dmikusa-pivotal/cf-php-build-pack.git[/code] 
说明:

name 指定了应用的名称

host 指定了应用的扩展域名,如上面的范例文件则生成域名:

lzhfirstphp. ng.bluemix.net

其他不做变动,修改完成后,将文件保存。

编制该文件有三个注意事项:

文件格式需要指定为 UTF-8 的格式

设置应用名称时,需要注意不能重复。

设置 HOST 名称时,尽可能长一些,或者按照个人姓名、公司名称进行设置,笔者上传部署时曾经出现过错误,估计是名称重复,后来修改后,部署成功。

在微信公众平台设置为开发模式

进入微信公众平台,登录后,进入高级功能,设置开始开发模式。

图 5




图 6




在微信公众平台接口中,设置对应的 URL 及令牌。

图 7




设置一个基于 Bluemix 的网址

在 URL 中设置网址,注意此处的形式必须与前面设置的一致。

设置微信公众平台应用的令牌(token)

设置一个令牌信息,该令牌信息是由自己指定的,一般采用特别的字符进行,以保证安全性。

下载微信公众平台的范例程序,笔者采用 PHP 语言,对该程序进行修改,设置令牌(token)等相关信息。开发者可以在微信公众平台开发者文档中下载 DEMO 文件。

图 8




清单 1


<?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, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}

?>


在这个文件中,有三处需要改动:

第一:设置 TOKEN

define("TOKEN", "abcdefg123");//第一处修改


这里的数值,需要与前面网页中的 Token 的设置严格一致。

第二:这个范例程序中只是设置了验证模式,而没有消息的响应处理,笔者将该文件进行了修改,当存在验证参数时进行验证,而不存在验证信息时,则调用响应方法。

if   ( $_GET["echostr"] )
{
$wechatObj->valid();
}
else
{
$wechatObj->responseMsg();
}


第三:在范例程序中,对输入信息进行了一点处理,设置为返回信息。

$contentStr = "Welcome to wechat world!".$keyword;


也就是将微信粉丝输入的信息,加上"Welcome to wechat world!"后返回。

另外需要注意的是该 PHP 文件的编码也必须是 UTF-8 的。上传(push)PHP 文件,如果上传正确,则等待应用执行。

cf api https://api.ng.bluemix.net
cf login

此处输入申请的用户邮件、密码,执行至运行结束。

cf push -f manifest.yml

该文件名指定必须与前述的配置文件完全一致。

在正常的配置结束后,就可以在 Bluemix 中看到该应用,该应用处于正常运行的状态。

图 9




在微信公众平台中,点击提交,系统会提示验证通过。如果提示验证不通过,需要检查 URL、Token、程序中的 Token 以及程序代码的正确性。

另外,需要注意的是,腾讯要求服务器响应必须在 5 秒以内,因此在网络环境不够好的情况下,也许需要多提交几次才可以完成。

特别需要注意的是,笔者曾经进行过新浪的微博开发,新浪微博开发可以采取本地服务器,一样可以验证通过,而腾讯的这种验证必须使用外部可以访问的网址,笔者曾经为此很困扰,而且腾讯的验证必须使用 80 端口,不支持 URL 带端口号,这也曾经困扰过笔者。幸而 IBM 的 Bluemix 平台可以支持。

利用手机微信,向微信公众平台发送信息,获得微信公众平台返回的信息。

设置成功后,例如手机微信关注该微信公众平台账号,例如笔者的"正海说知识创新",账号:"zhszscx"关注的方法可以是名称查询、代号查询,也可以扫描如下的二维码,进行体验。

想该账号发送:hello!

将会收到系统返回的:Welcome to wechat world! hello!

这就表示基于 Bluemix 的微信公众平台开发顺利完成。

回页首


开发中注意事项

对于前面开发中介绍到的可能出现问题的地方再做一些总结:

正确设置 HOST 名称,不可以重复。

HOST 名称加上域名,需要和微信公众平台中的 URL 相匹配。

程序中的 Token 的设置必须同微信公众平台中的设置相匹配。

配置文件必须使用 UTF-8 格式。

Index.php 程序文件格式必须使用 UTF-8 格式。

系统未做说明,但是默认采用的是 index.php 文件作为入口,也就是说,如果按本文所叙述的程序编制方法,利用域名访问时,将没有结果展示。

在微信公众平台提交时,可能显示失败,需要提交多次,知道显示成功。

另外需要说明的是,目前的程序只对文本型微信信息进行了回复,其他信息未做处理。而开发者如果在开发中需要变更程序,则需要再次 PUSH 就可以,但是不需要在微信编辑模式再次提交。

回页首


发展展望

笔者在前述的基础上,又增加了数据库的链接,主要是 MYSQL 服务的建立、MYSQL 服务与应用的绑定,在 PHP 程序文件中实现服务的参数调用,数据表的创建、插入、显示,成功实现了数据库的处理,另外也成功部署了基于 PHP 的网站形式的应用,有了这样的基础,说明可以利用 IBM 的 Bluemix 平台实现开发微信公共账号应用。

笔者同时也必须要说明的是,本文只是对 Bluemix 的一个入门级应用的简要总结,算是抛砖引玉,对于 Bluemix 还只是冰山一角,有待更多研究,希望与广大开发者合作共进。


参考资料


学习

构建因特网应用:安装
CF,连接 Bluemix,登录 Bluemix,上传一个应用、访问应用。

微信公众平台开发者文档-接入指南:申请消息接口,验证
URL 有效性,成为开发者。

微信公众平台开发者文档-接受普通消息:介绍微信消息处理模式、消息数据类型、格式及参数说明。

微信公众平台开发者文档-发送被动响应消息:介绍微信发送被动响应消息处理模式、消息数据类型、格式及参数说明。

Bluemix 资源中心:本专题提供了丰富的文章、教程和演示等学习资源,带您由浅入深地了解
Bluemix。

developerWorks 云计算站点 提供了有关云计算的更新资源,包括

云计算 简介

更新的 技术文章和教程,以及网络广播,让您的开发变得轻松,专家研讨会和录制会议 帮助您成为高效的云开发人员。

连接转为云计算设计的 IBM 产品下载和信息

关于 社区最新话题 的活动聚合。


讨论

加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他
developerWorks 用户交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  云平台 bluemix