这篇文章中我们将简单的介绍 Salesforce 怎样和微信公众平台集成。代码部分我选择的是 REST API 来实现,为了更直接的调用 REST API 方法,我采用了Force.com Site, 这样省去了 OAuth 的认证。接下来我们将详细的讲解开发过程。
第一步:在 Org 中创建一个 Site
如下图所示:
第二步: 创建 Apex Rest Class, 作为微信服务接口
代码如下所示
@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'); // 微信请求URL时传过来的timestamp值
String nonce = RestContext.request.params.get('nonce'); // 随机数-->微信请求URL时传过来的nonce值
String echostr = RestContext.request.params.get('echostr'); // 随机字符串
if(checkSignature(signature, timestamp, nonce))
{
RestContext.response.addHeader('Content-Type', 'text/plain');
RestContext.response.responseBody = Blob.valueOf(echostr);
}
}
/*
* 验证URL Echostr算法:
* 1. 将Token(用户在微信后台配置的值), 时间戳(微信请求URL时传过来的timestamp值), nonce(微信请求URL时传过来的nonce值)按照字母顺序进行排列;
* 2. 排列好后拼接成一个字符串;
* 3. 通过sha1算法转换此字符串后的结果如果正常就是echostr的值.
*/
public static boolean checkSignature(String signature, String timestamp, String nonce)
{
String[] arr = new String[] { 'samba', timestamp, nonce };
arr.sort();
String content = '';
for (Integer i = 0; i < arr.size(); i++)
{
content += arr[i];
}
Blob hash = Crypto.generateDigest('SHA1', Blob.valueOf(content));
String hexDigest = EncodingUtil.convertToHex(hash);
String singUpperCase = hexDigest.toUpperCase();
// 将sha1加密后的字符串可与signature对比, 标识该请求来源于微信
return singUpperCase != null ? singUpperCase.equals(signature.toUpperCase()) : false;
}
}
在这段代码中,Rest 接口的名称是 WeChatRest。为什么要加doGet方法呢? 微信会通过 Get 方式发送这四个参数到 WeChatRest 接口中。如果四个参数中的 echostr 值与微信认为的一致则验证成功,否则验证失败。
第三步: 添加 REST 类到 Site 中
在我们创建的 Site 页面上,单击 Public Access Settings 按钮, 找到 Enabled Apex Class Access 区域并单击 Edit 按钮,然后在打开的页面中你将看到 Avaliable Apex Classes 列表,选中 WeChatRestController 名字并把它添加到左边的 Enabled Apex Classes列表中。完成之后,如图所示
第四步: 测试WeChatRest接口
测试连接是: https://testprint2014-developer-edition.ap1.force.com/services/apexrest/WeChatRest. 当访问这个连接时,看到下图所示,表明访问成功。
第五步: 配置微信后台
在开发模式中,输入我们测试的 URL, 并设置一个 Token。如下图所示
第六步: 开启服务器
单击启用按钮后,微信会提示是否开启成功。配置成功以后,如图所示:
后续我们将介绍 Salesforce 怎样接收微信发来的信息。