salesforce 和微信的集成(一)通过SFDC Site打开微信开发接口
2015-04-14 11:43
2211 查看
http://blog.csdn.net/gaofly89/article/details/40779645
本文代码参照柳峰的代码。十分感谢。
开始在做微信集成的时候,是采用微信+阿里云服务器+SFDC这种模式进行的。在阿里云上部署java程序实现和微信服务器的沟通,在通过SFDC的对外API实现和java程序的沟通。这种方式使项目成本提升,并且大多数客户难以接受。
后来在论坛和qq群里,看大家的讨论,发现可以采用REST API来实现。在我的传统观念里REST API需要使用SeessionID和token的,没有这两个如何调用API呢?经过研究发现我的理解很片面,存在一直开放是的API接口。(Site这个功能,在有的org里没有,需要申请,这部分内容我不打了解。不过我申请的免费开发org里有这个功能)
闲言不多说。
1、在SFDC上创建Site,设置如图。
2、点击保存按钮进入到如图的页面(下次进来的时候,要先edit,然后保存,才能再次来到这个页面)
在标示为1的地方设计Site访问的class,和profile的设置方法类似。标记为2的地方不可以添加任何的页面,否则程序出现问题。
3、新建一个类代码如下
[java] view
plaincopy
@RestResource(urlMapping='/CoreService/*')
global with sharing class ApexRESTCycleExample {
@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(signature+'====='+timestamp+'====='+nonce+'====');
String endstr= '';
if(checkSignature(signature,timestamp,nonce)){
RestContext.response.addHeader('Content-Type', 'text/plain');
RestContext.response.responseBody = Blob.valueOf(echostr);
}
}
public static boolean checkSignature(String signature, String timestamp, String nonce) {
String[] arr = new String[] { 'weixin', timestamp, nonce };
// 将token、timestamp、nonce三个参数进行字典序排序
// Arrays.sort(arr);
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();
System.debug(singUpperCase +'===============');
// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
Boolean flag = singUpperCase != null ? singUpperCase .equals(signature.toUpperCase()) : false;
system.debug(flag + '==============');
return flag;
}
}
该段代码参考柳峰的博客编写。
4、测试程序如图。注意:必须以https的形式访问,否则失败
5、设置微信中的接口
复制上面的link到微信里,就可以成功打开了。
问题总结:1、我在写的时候,由于不知道可以直接调用API返回数据,绕了很多的弯路。
2、要以http是的方式请求。
本文代码参照柳峰的代码。十分感谢。
开始在做微信集成的时候,是采用微信+阿里云服务器+SFDC这种模式进行的。在阿里云上部署java程序实现和微信服务器的沟通,在通过SFDC的对外API实现和java程序的沟通。这种方式使项目成本提升,并且大多数客户难以接受。
后来在论坛和qq群里,看大家的讨论,发现可以采用REST API来实现。在我的传统观念里REST API需要使用SeessionID和token的,没有这两个如何调用API呢?经过研究发现我的理解很片面,存在一直开放是的API接口。(Site这个功能,在有的org里没有,需要申请,这部分内容我不打了解。不过我申请的免费开发org里有这个功能)
闲言不多说。
1、在SFDC上创建Site,设置如图。
2、点击保存按钮进入到如图的页面(下次进来的时候,要先edit,然后保存,才能再次来到这个页面)
在标示为1的地方设计Site访问的class,和profile的设置方法类似。标记为2的地方不可以添加任何的页面,否则程序出现问题。
3、新建一个类代码如下
[java] view
plaincopy
@RestResource(urlMapping='/CoreService/*')
global with sharing class ApexRESTCycleExample {
@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(signature+'====='+timestamp+'====='+nonce+'====');
String endstr= '';
if(checkSignature(signature,timestamp,nonce)){
RestContext.response.addHeader('Content-Type', 'text/plain');
RestContext.response.responseBody = Blob.valueOf(echostr);
}
}
public static boolean checkSignature(String signature, String timestamp, String nonce) {
String[] arr = new String[] { 'weixin', timestamp, nonce };
// 将token、timestamp、nonce三个参数进行字典序排序
// Arrays.sort(arr);
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();
System.debug(singUpperCase +'===============');
// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
Boolean flag = singUpperCase != null ? singUpperCase .equals(signature.toUpperCase()) : false;
system.debug(flag + '==============');
return flag;
}
}
该段代码参考柳峰的博客编写。
4、测试程序如图。注意:必须以https的形式访问,否则失败
5、设置微信中的接口
复制上面的link到微信里,就可以成功打开了。
问题总结:1、我在写的时候,由于不知道可以直接调用API返回数据,绕了很多的弯路。
2、要以http是的方式请求。
相关文章推荐
- salesforce 和微信的集成(一)通过SFDC Site打开微信开发接口
- 集成微信接口开发
- java+jsp微信开发入门教程 jssdk,通过config接口注入权限验证配置,微信开发教程
- 微信开发之——JSSDK,通过config接口注入权限验证配置
- 企业微信JS-SDK开发(一)------通过config接口注入权限验证配置
- C#微信开发-微信JS-SDK(1)之通过config接口注入权限验证配置
- java SpringMVC mybatis 后台框架 集成代码生成器开发利器 全部源码_java微信接口开发
- C#微信网页开发---JSSDK使用 通过config接口注入权限验证配置
- 驱动开发之 应用程序通过设备接口打开设备
- 微信的高级接口(通过微信认证后自动获得)可以做什么?微信服务号定制开发能为企业带来什么?
- 微信开发第5章 通过accesstoken获取用户基本信息并修改用户备注
- C#.net 微信公众账号接口开发
- Salesforce与微信开发(1)
- 移动应用可以通过微信沟通接口连接公众号 微信涨粉多了一个新通道
- 如何播放通过微信下载接口下载的音频文件
- 微信简易开发接口示例代码
- 微信沙盒订单查询,微信订单号查询接口demo源码——微信支付沙箱开发9
- 微信公众号开发《三》微信JS-SDK之地理位置的获取与在线导航,集成百度地图实现在线地图搜索
- Java微信二次开发之10-解析接口中的消息创建时间CreateTime 并转换成需要的格式
- 微信公众平台消息接口开发(34)微信墙之表白墙/婚礼墙/晚会墙/会议墙/晒单墙/照片墙/历史墙