Salesforce Force.com Site 集成微信公众平台 (一) 后台配置

这篇文章中我们将简单的介绍 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 怎样接收微信发来的信息。

Samba

Read more posts by this author.