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


第一步,申请force.com账号,请至developer.force.com申请,如是www.salesforce.com申请下来的是作为客户的账号,不适合开发人员;第二步,创建一个Apex Rest Class,来作为微信服务接口,这里创建的类是WeChatRestController,Rest接口名称是WeChatRest:

@RestResource(urlMapping='/WeChatRest/*')
global with sharing class WeChatRestController{
@HttpGet
global static void doGet(){
String signature = RestContext.request.params.get('signature');
String timestamp = RestContext.request.params.get('timestamp');
String nonce = RestContext.request.params.get('nonce');
String echostr = RestContext.request.params.get('echostr');
System.debug(echostr + ' - ' + timestamp);
RestContext.response.addHeader('Content-Type', 'text/plain'); RestContext.response.responseBody = Blob.valueOf(echostr); //return echostr;
}
}
 

在微信中我们将使用这个接口来配置URL,配置时腾讯要求提供此URL,配置窗口如下:

补充说明,本文发表后腾讯又推出了“消息加解密密钥”,其支持明文模式、兼容模式和安全模式三种,主要区别在于明文模式下腾讯推送给接口的是明文的XML消息,兼容模式下是既有明文XML消息也有加密后的XML消息,安全模式则只有加密后的XML消息,以为用户提供更高级的安全支持,简化大家的学习曲线,本文及以后的所有相关文章均采用明文模式。

腾讯将通过Get方式发送四个参数至此URL,URL格式如下(仅为示例):https://msd-developer-edition.ap1.force.com/services/apexrest/WeChatRest?signature=GenePoint&echostr=test&timestamp=111&nonce=222如果URL返回的值和四个参数中的echostr值一致则腾讯认为验证成功,如果不一致则认为验证失败,配置无法继续,偷懒的方法是直接返回该值即可,风险是你的URL也可以被其他人乱用。这里的echostr的值实际上是根据用户在腾讯后台配置的Token加上时间戳,再加上nonce参数的值按照一定的算法计算出来的,具体算法参照附注,这里不赘述。代码需要说明的地方是如果直接返回echostr,force.com默认会是一个xml结构的内容,腾讯会认为和echostr值不等,判断为配置失败。为此,需要通过Blog.valueOf方法来将其直接转换为文本信息。第三步,配置Site.com以启用公网访问此URLforce.com类以及网页等默认是需要用户验证后才能通过访问,但我们可以通过site.com启用公网访问此URL,为此首先需要创建域名,进入Develop->Sites,输入想创建的域名,例如笔者的域名为johnson0001:

http://johnson0001-developer-edition.ap1.force.com 

创建成功后下一步创建站点,点击New按钮:

在接下来的站点信息输入画面输入Site label,Site Name,选择任一页面作为“Active Site Home Page”(这里不需要建网页,任意选即可),保持其他选项不变,点击“save”按钮:

在紧接下来的画面里点击“Public Access Settings”按钮,

在接下来的画面里找到“Enable Apex Class Access”,点击Edit按钮

将WeChatRestController类添加到右边的列表里,这将使得该类支持匿名公开访问:

最后回到Sites首页,点击“Activate”按钮激活站点,此时既可以通过以下URL访问我们开发的接口(留意可能需要等几分钟URL才会生效):

https://johnson0001-developer-edition.ap1.force.com/services/apexrest/WeChatRest 

第四步,配置腾讯后台,在开发模式下,输入此URL,并输入任意Token,点击提交按钮,如腾讯提示成功则表明成功完成配置:

 
 

附注:验证URL Echostr算法:1. 将Token(用户在腾讯后台配置的值), 时间戳(腾讯请求URL时传过来的timestamp值),nonce(腾讯请求URL时传过来的nonce值)按照字母顺序进行排列;2. 排列好后拼接成一个字符串;3.通过sha1算法转换此字符串后的结果如果正常就是echostr的值,

Force.com微信开发系列(一) 后台配置的更多相关文章

  1. Force.com微信开发系列(五)自定义菜单进阶及语音识别

    在上文里我们介绍了如何通过Force.com平台里为微信账号添加自定义菜单,本文里我们将进一步介绍如何查询菜单以及删除菜单的相关知识,最后会介绍微信平台如何进行语音识别的相关技术. 查询菜单 与创建菜 ...

  2. Force.com微信开发系列(七)OAuth2.0网页授权

    OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站上存储的私密资源(如用户个人信息.照片.视频.联系人列表),而无须将用户名和密码提供给第三方应用.本文将详细介绍OA ...

  3. Force.com微信开发系列(三)申请测试账号及回复图文消息

    Force.com除了简单的文本消息回复外,还能回复图文并茂的消息.能回复音乐或者视频.能对用户发来的语音进行识别.能够搜集用户的地理位置信息并提供相应的内容或服务等,本文将对这些技能一一展开说明,在 ...

  4. Force.com微信开发系列(二)用户消息处理

    Force.com是国际知名的云平台公司,成功配置好Force.com作为微信公开号的服务端后,接下来需要的任务是处理用户发送的消息.当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML ...

  5. Force.com微信开发系列(六)客服接口

    当用户主动发消息给微信公众账号的时候(包括发送信息.点击自定义菜单click事件.订阅事件.扫描二维码事件.支付成功事件.用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前为48小时 ...

  6. Force.com微信开发系列(四)申请Access Token及自定义菜单之创建菜单

    在微信接口开发中,许多服务的使用都离不开Access Token,Access Token相当于打开这些服务的钥匙,正常情况下会在7200秒内失效,重复获取将导致上次获取的Token失效,本文将首先介 ...

  7. Force.com微信开发系列(八)生成带参数的二维码

    为了满足用户渠道推广分析的需要,公众平台提供了生成带二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送.目前有两种类型的二维码,分别是临时二维码和永久二维码 ...

  8. 《C#微信开发系列(3)-获取接口调用凭据》

    3.0获取接口调用凭据 ①接口说明 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留 ...

  9. 《C#微信开发系列(2)-自定义菜单管理》

    2.0自定义菜单管理 ①接口说明 微信服务号聊天窗口下面的菜单项(有的公众号有启用有的则没有),这个可以在编辑模式简单配置,也可以在开发模式代码配置.微信公众平台开发者文档:微信公众号开发平台创建自定 ...

随机推荐

  1. 十四、EnterpriseFrameWork框架核心类库之简易ORM

    在写本章前先去网上找了一下关于ORM的相关资料,以为本章做准备,发现很多东西今天才了解,所以在这里也对ORM做不了太深入的分析,但还是浅谈一下EFW框架中的设计的简易ORM:文中有一点讲得很有道理,D ...

  2. Qt的零碎知识

    1.QObject是所有Qt对象的基类,他给C++的类带来了若干新的功能.使用Q_OBJECT宏能声明一个C++类为一个QObject.如: class Notepad : public QMainW ...

  3. iOS app开发资料整理

    Objective C快速入门: http://blog.csdn.net/totogo2010/article/details/7632384 http://www.cocoachina.com/i ...

  4. BackgroundCheck – 根据图片亮度智能切换元素样式

    BackgroundCheck 是一个轻量的 JavaScript 库,能够根据元素后面的图片的亮度自动切换元素样式.例如在图片幻灯片功能中,根据图片亮度调整导航箭头的颜色,这样让图片和导航的颜色形成 ...

  5. 浅谈java类集框架和数据结构(1)

    在另外一篇博客我简单介绍了java类集框架相关代码和理论. 这一篇博客我主要分析一下各个类集框架的原理以及源码分析. 一:先谈谈LinkedList 这是LinkedList源码的开头,我们能看到几点 ...

  6. sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。

    用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" ...

  7. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)

    为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程.最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程. 关系和存储引擎 如图所示 ...

  8. 高级四则运算器—结对项目反思(193 & 105)

    高级四则运算器—结对项目反思(193 & 105) 本周我和一位韩国同学(71061105)一起结对编程完成了我们的结对项目——高级的小学四则运算题目生成器. PSP表格   PSP2.1 P ...

  9. IT人生思考

    夜已深,心里却十分清醒... 说说,这段时间经历的事情吧.我是一枚IT菜鸟,2014年毕业于武汉软件工程职业学院.大学时代,虽然没翘过课,专业学的也不是特别好.当时也没有想过毕业会从事IT行业.只是想 ...

  10. 【C#】线程之Task

    Task开启线程 有两种启动方式: 1.构造创建线程,然后启动 var taskForAction = new Task(() => { //do something }); taskForAc ...