zoukankan      html  css  js  c++  java
  • salesforce接收站点传过来的json,解析并序列化json,在保存到salesforce的个案以及测试类

    @RestResource(urlMapping='/LiveChatTicketWebhook')
    global without sharing class LiveChatTicketWebhook {
           
          @httpPost 
        global static void doPost() {
            //post请求
            RestRequest req = RestContext.request;
            //响应
            RestResponse res = RestContext.response;
            
            //解析请求到的body
            String requestBbody = req.requestBody.toString();
            //转义反斜杠
            String reqBbody = requestBbody.Replace('\n','\\n');
            system.debug(requestBbody);
            try{
            //序列化字符串
            TicketType tt = (TicketType)JSON.deserialize(reqBbody, TicketType.class);
            system.debug(tt);
    
             //查找相同的邮箱
              List<Contact > cont =[select email from Contact where email =:tt.ticket.requester.mail];
              Case c = new Case();
                  String s='';
                  String name = '';
                  String texts = '';
                  String sub = '';
                  String id='';
             //如果cont不为空,就关联个案与联系人
             if(cont != null && cont.size() > 0){
                  c.ContactId=cont[0].Id; 
                  //循环取出 Events 里面的message
                  for(Events et:tt.ticket.events){
                  texts  = et.message;
                  }    
                  id=tt.license_id;
                  //获取我传进来的值,赋给LivechatSetting__c 方法
              LivechatSetting__c ls = CommonUtil.getLivechatSetting(id);
                  if(ls!= null){
                      c.origin=ls.Case_Origin__c;  
                  }
                  name  = tt.ticket.requester.name;
                  s += name+':'+texts+'\n';  
                  c.Description=s; 
                  Insert c; 
                  
                 
               } else{
                  for(Events et:tt.ticket.events){
                  texts  = et.message;
                  }
                    id=tt.license_id;
                  LivechatSetting__c ls = CommonUtil.getLivechatSetting(id);
                    if(ls!= null){
                      c.origin=ls.Case_Origin__c;  
                  } 
                  name = tt.ticket.requester.name;
                  sub = tt.ticket.subject;
                  s += name+':'+texts+'\n';  
                  c.Description=s; 
                  c.SuppliedName=tt.ticket.requester.name;
                  c.SuppliedEmail=tt.ticket.requester.mail;
                  Insert c;          
               
               }
           
        }catch(Exception ex){
            insert new log__c(name='ticket error:',description__c=ex.getmessage());
           }
            
        
        }
        public class TicketType{
            private String event_type;
            private String token;
            private String license_id;
            private Ticket ticket;
            
        }
        public class Ticket { 
            // private Assignee assignee;      
             private Events[] events;
             private Groups[] groups;
             private String id;
             private Requester requester;
             private String status;
             private String subject;
             private List<String> tags;
             private Source source;
    
         }
       
         
        class Events{
             private Author author;
           //  private Date date;
            // private boolean is_private;
             private String message;
             private String type;
             private Source source;
         }
        class Requester{
             private String mail;
             private String name;
             private String ip;
         }
         
        class Source {
            private String type;
            private String url;
        }
        
        class Author {
            private String id;
            private String name;
            private String type;
        }
        
        class Groups {
            private Decimal id;
            private String name;
        }
       
        }
    @isTest
    public class LiveChatTicketWebhookTest{
            
        @isTest
        private static void doPostTest() {
            Contact con = new Contact( LastName = 'test',email = '12345@wd.com');
            insert con;
           
            
            String JSONMsg = '{"event_type":"ticket_created","token":"d157e75ddb196c7c324065e959b3afd9","license_id":"8918404",'
            +'"ticket":{"events":[{"author":{"id":"12345@wd.com","name":"testAngle","type":"client"},"date":"2017-11-13T08:52:10Z",'
            +'"is_private":false,"message":"Message:\ntest\n/Cart: 0 items, $0.00 total","type":"message","source":'
            +'{"url":"https://www.queenfy.com/","type":"chat-window"}}],"groups":[{"id":0,"name":"All operators"}],"id":"K01DF",'
            +'"requester":{"mail":"12345@wd.com","name":"testAngle","utc_offset":"Asia/Shanghai","ip":"61.152.234.182"},"status":"open",'
            +'"subject":"(no subject)","tags":[],"source":{"type":"chat-window","url":"https://www.queenfy.com/"}}}';
        
            RestRequest request = new RestRequest();
            request.addHeader('Content-Type', 'application/json'); // Add a JSON Header as it is validated
            request.addHeader('X-Shopify-Shop-Domain', 'mydemostore2017.myshopify.com');
            request.httpMethod = 'POST';        // Perform a POST
            request.requestBody = Blob.valueof(JSONMsg); // Add JSON Message as a POST
    
            RestContext.request = request;
            // Call the method to test
            LiveChatTicketWebhook.doPost();
            
            
           String JSONMsgs = '{"event_type":"ticket_created","token":"d157e75ddb196c7c324065e959b3afd9","license_id":"8918404",'
            +'"ticket":{"events":[{"author":{"id":"274474@11.com","name":"testAngle","type":"client"},"date":"2017-11-13T08:52:10Z",'
            +'"is_private":false,"message":"Message:test/Cart: 0 items, $0.00 total","type":"message","source":'
            +'{"url":"https://www.queenfy.com/","type":"chat-window"}}],"groups":[{"id":0,"name":"All operators"}],"id":"K01DF",'
            +'"requester":{"mail":"274474@11.com","name":"testAngle","utc_offset":"Asia/Shanghai","ip":"61.152.234.182"},"status":"open",'
            +'"subject":"(no subject)","tags":[],"source":{"type":"chat-window","url":"https://www.queenfy.com/"}}}';
        
            RestRequest requests = new RestRequest();
            requests.addHeader('Content-Type', 'application/json'); // Add a JSON Header as it is validated
            requests.addHeader('X-Shopify-Shop-Domain', 'mydemostore2017.myshopify.com');
            requests.httpMethod = 'POST';        // Perform a POST
            requests.requestBody = Blob.valueof(JSONMsgs); // Add JSON Message as a POST
    
            RestContext.request = requests;
            // Call the method to test
            LiveChatTicketWebhook.doPost();
        }
        
    }
    

      

  • 相关阅读:
    Fedora 12/Debian 以root登录图形界面
    贡献一个简单的日志类
    "没有 pthread_create 的手册页条目"解决办法
    OpenBSD 下架设vsftpd
    NetSnmp初步(一):让我们的程序提供snmp服务
    linux socket接收、发送小工具(支持tcp、udp包(组播)的发送接收)
    NetSnmp初步(二):发送Notification
    netbeans添加现有源文件时自动更新Makefile依赖关系
    Fedora Core12的防火墙会过滤掉部分IP数据包,在开发调试时建议关闭防火墙
    NetSnmp初步(三):接收控制命令:实现SNMP的SET命令
  • 原文地址:https://www.cnblogs.com/pipidan/p/7831656.html
Copyright © 2011-2022 走看看