@@ -1,12 +1,18 @@ | |||||
package me.chanjar.weixin.mp.api; | package me.chanjar.weixin.mp.api; | ||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.*; | |||||
import java.io.File; | import java.io.File; | ||||
import java.util.Date; | import java.util.Date; | ||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfMsgList; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfOnlineList; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionGetResult; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionList; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionWaitCaseList; | |||||
/** | /** | ||||
* 客服接口 , | * 客服接口 , | ||||
* 命名采用kefu拼音的原因是: | * 命名采用kefu拼音的原因是: | ||||
@@ -17,6 +23,14 @@ import java.util.Date; | |||||
*/ | */ | ||||
public interface WxMpKefuService { | public interface WxMpKefuService { | ||||
/** | |||||
* <pre> | |||||
* 发送客服消息 | |||||
* 详情请见: <a href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140547&token=&lang=zh_CN">发送客服消息</a> | |||||
* </pre> | |||||
*/ | |||||
boolean customMessageSend(WxMpCustomMessage message) throws WxErrorException; | |||||
//*******************客服管理接口***********************// | //*******************客服管理接口***********************// | ||||
/** | /** | ||||
@@ -3,7 +3,6 @@ package me.chanjar.weixin.mp.api; | |||||
import me.chanjar.weixin.common.bean.WxJsapiSignature; | import me.chanjar.weixin.common.bean.WxJsapiSignature; | ||||
import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
import me.chanjar.weixin.common.util.http.RequestExecutor; | import me.chanjar.weixin.common.util.http.RequestExecutor; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.WxMpIndustry; | import me.chanjar.weixin.mp.bean.WxMpIndustry; | ||||
import me.chanjar.weixin.mp.bean.WxMpMassGroupMessage; | import me.chanjar.weixin.mp.bean.WxMpMassGroupMessage; | ||||
import me.chanjar.weixin.mp.bean.WxMpMassNews; | import me.chanjar.weixin.mp.bean.WxMpMassNews; | ||||
@@ -82,14 +81,6 @@ public interface WxMpService { | |||||
*/ | */ | ||||
WxJsapiSignature createJsapiSignature(String url) throws WxErrorException; | WxJsapiSignature createJsapiSignature(String url) throws WxErrorException; | ||||
/** | |||||
* <pre> | |||||
* 发送客服消息 | |||||
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=发送客服消息 | |||||
* </pre> | |||||
*/ | |||||
void customMessageSend(WxMpCustomMessage message) throws WxErrorException; | |||||
/** | /** | ||||
* <pre> | * <pre> | ||||
* 上传群发用的图文消息,上传后才能群发图文消息 | * 上传群发用的图文消息,上传后才能群发图文消息 | ||||
@@ -3,15 +3,18 @@ package me.chanjar.weixin.mp.api.impl; | |||||
import java.io.File; | import java.io.File; | ||||
import java.util.Date; | import java.util.Date; | ||||
import org.slf4j.Logger; | |||||
import org.slf4j.LoggerFactory; | |||||
import com.google.gson.JsonObject; | import com.google.gson.JsonObject; | ||||
import me.chanjar.weixin.common.bean.result.WxError; | import me.chanjar.weixin.common.bean.result.WxError; | ||||
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; | import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; | ||||
import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | |||||
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | |||||
import me.chanjar.weixin.mp.api.WxMpKefuService; | import me.chanjar.weixin.mp.api.WxMpKefuService; | ||||
import me.chanjar.weixin.mp.api.WxMpService; | import me.chanjar.weixin.mp.api.WxMpService; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | ||||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfSessionRequest; | import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfSessionRequest; | ||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; | import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; | ||||
@@ -27,6 +30,8 @@ import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionWaitCaseList; | |||||
* | * | ||||
*/ | */ | ||||
public class WxMpKefuServiceImpl implements WxMpKefuService { | public class WxMpKefuServiceImpl implements WxMpKefuService { | ||||
protected final Logger log = LoggerFactory | |||||
.getLogger(WxMpKefuServiceImpl.class); | |||||
private static final String API_URL_PREFIX = "https://api.weixin.qq.com/customservice"; | private static final String API_URL_PREFIX = "https://api.weixin.qq.com/customservice"; | ||||
private WxMpService wxMpService; | private WxMpService wxMpService; | ||||
@@ -34,19 +39,31 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
this.wxMpService = wxMpService; | this.wxMpService = wxMpService; | ||||
} | } | ||||
@Override | |||||
public boolean customMessageSend(WxMpCustomMessage message) | |||||
throws WxErrorException { | |||||
String url = "https://api.weixin.qq.com/cgi-bin/message/custom/send"; | |||||
String responseContent = this.wxMpService.post(url, message.toJson()); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, message.toJson(), | |||||
responseContent); | |||||
return true; | |||||
} | |||||
@Override | @Override | ||||
public WxMpKfList kfList() throws WxErrorException { | public WxMpKfList kfList() throws WxErrorException { | ||||
String url = "https://api.weixin.qq.com/cgi-bin/customservice/getkflist"; | |||||
String responseContent = this.wxMpService | |||||
.execute(new SimpleGetRequestExecutor(), url, null); | |||||
String url = API_URL_PREFIX + "/getkflist"; | |||||
String responseContent = this.wxMpService.get(url, null); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, null, | |||||
responseContent); | |||||
return WxMpKfList.fromJson(responseContent); | return WxMpKfList.fromJson(responseContent); | ||||
} | } | ||||
@Override | @Override | ||||
public WxMpKfOnlineList kfOnlineList() throws WxErrorException { | public WxMpKfOnlineList kfOnlineList() throws WxErrorException { | ||||
String url = "https://api.weixin.qq.com/cgi-bin/customservice/getonlinekflist"; | |||||
String responseContent = this.wxMpService | |||||
.execute(new SimpleGetRequestExecutor(), url, null); | |||||
String url = API_URL_PREFIX + "/getonlinekflist"; | |||||
String responseContent = this.wxMpService.get(url, null); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, null, | |||||
responseContent); | |||||
return WxMpKfOnlineList.fromJson(responseContent); | return WxMpKfOnlineList.fromJson(responseContent); | ||||
} | } | ||||
@@ -54,8 +71,9 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
public boolean kfAccountAdd(WxMpKfAccountRequest request) | public boolean kfAccountAdd(WxMpKfAccountRequest request) | ||||
throws WxErrorException { | throws WxErrorException { | ||||
String url = API_URL_PREFIX + "/kfaccount/add"; | String url = API_URL_PREFIX + "/kfaccount/add"; | ||||
this.wxMpService.execute(new SimplePostRequestExecutor(), url, | |||||
request.toJson()); | |||||
String responseContent = this.wxMpService.post(url, request.toJson()); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, request.toJson(), | |||||
responseContent); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -63,16 +81,18 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
public boolean kfAccountUpdate(WxMpKfAccountRequest request) | public boolean kfAccountUpdate(WxMpKfAccountRequest request) | ||||
throws WxErrorException { | throws WxErrorException { | ||||
String url = API_URL_PREFIX + "/kfaccount/update"; | String url = API_URL_PREFIX + "/kfaccount/update"; | ||||
this.wxMpService.execute(new SimplePostRequestExecutor(), url, | |||||
request.toJson()); | |||||
String responseContent = this.wxMpService.post(url, request.toJson()); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, request.toJson(), | |||||
responseContent); | |||||
return true; | return true; | ||||
} | } | ||||
@Override | @Override | ||||
public boolean kfAccountInviteWorker(WxMpKfAccountRequest request) throws WxErrorException { | public boolean kfAccountInviteWorker(WxMpKfAccountRequest request) throws WxErrorException { | ||||
String url = API_URL_PREFIX + "/kfaccount/inviteworker"; | String url = API_URL_PREFIX + "/kfaccount/inviteworker"; | ||||
this.wxMpService.execute(new SimplePostRequestExecutor(), url, | |||||
request.toJson()); | |||||
String responseContent = this.wxMpService.post(url, request.toJson()); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, request.toJson(), | |||||
responseContent); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -80,14 +100,20 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
public boolean kfAccountUploadHeadImg(String kfAccount, File imgFile) | public boolean kfAccountUploadHeadImg(String kfAccount, File imgFile) | ||||
throws WxErrorException { | throws WxErrorException { | ||||
String url = API_URL_PREFIX + "/kfaccount/uploadheadimg?kf_account=" + kfAccount; | String url = API_URL_PREFIX + "/kfaccount/uploadheadimg?kf_account=" + kfAccount; | ||||
this.wxMpService.execute(new MediaUploadRequestExecutor(), url, imgFile); | |||||
WxMediaUploadResult responseContent = this.wxMpService | |||||
.execute(new MediaUploadRequestExecutor(), url, imgFile); | |||||
this.log.debug("\nurl:{}\nparams:{}&file:{}\nresponse:{}", url, kfAccount, | |||||
imgFile.getAbsolutePath(), | |||||
responseContent); | |||||
return true; | return true; | ||||
} | } | ||||
@Override | @Override | ||||
public boolean kfAccountDel(String kfAccount) throws WxErrorException { | public boolean kfAccountDel(String kfAccount) throws WxErrorException { | ||||
String url = API_URL_PREFIX + "/kfaccount/del?kf_account=" + kfAccount; | String url = API_URL_PREFIX + "/kfaccount/del?kf_account=" + kfAccount; | ||||
this.wxMpService.execute(new SimpleGetRequestExecutor(), url, null); | |||||
String responseContent = this.wxMpService.get(url, null); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, null, | |||||
responseContent); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -96,8 +122,9 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
throws WxErrorException { | throws WxErrorException { | ||||
WxMpKfSessionRequest request = new WxMpKfSessionRequest(kfAccount, openid); | WxMpKfSessionRequest request = new WxMpKfSessionRequest(kfAccount, openid); | ||||
String url = API_URL_PREFIX + "/kfsession/create"; | String url = API_URL_PREFIX + "/kfsession/create"; | ||||
this.wxMpService.execute(new SimplePostRequestExecutor(), url, | |||||
request.toJson()); | |||||
String responseContent = this.wxMpService.post(url, request.toJson()); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, request.toJson(), | |||||
responseContent); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -106,8 +133,9 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
throws WxErrorException { | throws WxErrorException { | ||||
WxMpKfSessionRequest request = new WxMpKfSessionRequest(kfAccount, openid); | WxMpKfSessionRequest request = new WxMpKfSessionRequest(kfAccount, openid); | ||||
String url = API_URL_PREFIX + "/kfsession/close"; | String url = API_URL_PREFIX + "/kfsession/close"; | ||||
this.wxMpService.execute(new SimplePostRequestExecutor(), url, | |||||
request.toJson()); | |||||
String responseContent = this.wxMpService.post(url, request.toJson()); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, request.toJson(), | |||||
responseContent); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -115,8 +143,9 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
public WxMpKfSessionGetResult kfSessionGet(String openid) | public WxMpKfSessionGetResult kfSessionGet(String openid) | ||||
throws WxErrorException { | throws WxErrorException { | ||||
String url = API_URL_PREFIX + "/kfsession/getsession?openid=" + openid; | String url = API_URL_PREFIX + "/kfsession/getsession?openid=" + openid; | ||||
String responseContent = this.wxMpService | |||||
.execute(new SimpleGetRequestExecutor(), url, null); | |||||
String responseContent = this.wxMpService.get(url, null); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, null, | |||||
responseContent); | |||||
return WxMpKfSessionGetResult.fromJson(responseContent); | return WxMpKfSessionGetResult.fromJson(responseContent); | ||||
} | } | ||||
@@ -124,8 +153,9 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
public WxMpKfSessionList kfSessionList(String kfAccount) | public WxMpKfSessionList kfSessionList(String kfAccount) | ||||
throws WxErrorException { | throws WxErrorException { | ||||
String url = API_URL_PREFIX + "/kfsession/getsessionlist?kf_account=" + kfAccount; | String url = API_URL_PREFIX + "/kfsession/getsessionlist?kf_account=" + kfAccount; | ||||
String responseContent = this.wxMpService | |||||
.execute(new SimpleGetRequestExecutor(), url, null); | |||||
String responseContent = this.wxMpService.get(url, null); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, null, | |||||
responseContent); | |||||
return WxMpKfSessionList.fromJson(responseContent); | return WxMpKfSessionList.fromJson(responseContent); | ||||
} | } | ||||
@@ -133,8 +163,9 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
public WxMpKfSessionWaitCaseList kfSessionGetWaitCase() | public WxMpKfSessionWaitCaseList kfSessionGetWaitCase() | ||||
throws WxErrorException { | throws WxErrorException { | ||||
String url = API_URL_PREFIX + "/kfsession/getwaitcase"; | String url = API_URL_PREFIX + "/kfsession/getwaitcase"; | ||||
String responseContent = this.wxMpService | |||||
.execute(new SimpleGetRequestExecutor(), url, null); | |||||
String responseContent = this.wxMpService.get(url, null); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, null, | |||||
responseContent); | |||||
return WxMpKfSessionWaitCaseList.fromJson(responseContent); | return WxMpKfSessionWaitCaseList.fromJson(responseContent); | ||||
} | } | ||||
@@ -156,7 +187,9 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
param.addProperty("msgid", msgId); //msgid 消息id顺序从小到大,从1开始 | param.addProperty("msgid", msgId); //msgid 消息id顺序从小到大,从1开始 | ||||
param.addProperty("number", number); //number 每次获取条数,最多10000条 | param.addProperty("number", number); //number 每次获取条数,最多10000条 | ||||
String responseContent = this.wxMpService.execute(new SimplePostRequestExecutor(), url, param.toString()); | |||||
String responseContent = this.wxMpService.post(url, param.toString()); | |||||
this.log.debug("\nurl:{}\nparams:{}\nresponse:{}", url, param.toString(), | |||||
responseContent); | |||||
return WxMpKfMsgList.fromJson(responseContent); | return WxMpKfMsgList.fromJson(responseContent); | ||||
} | } | ||||
@@ -44,7 +44,6 @@ import me.chanjar.weixin.mp.api.WxMpQrcodeService; | |||||
import me.chanjar.weixin.mp.api.WxMpService; | import me.chanjar.weixin.mp.api.WxMpService; | ||||
import me.chanjar.weixin.mp.api.WxMpUserService; | import me.chanjar.weixin.mp.api.WxMpUserService; | ||||
import me.chanjar.weixin.mp.api.WxMpUserTagService; | import me.chanjar.weixin.mp.api.WxMpUserTagService; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.WxMpIndustry; | import me.chanjar.weixin.mp.bean.WxMpIndustry; | ||||
import me.chanjar.weixin.mp.bean.WxMpMassGroupMessage; | import me.chanjar.weixin.mp.bean.WxMpMassGroupMessage; | ||||
import me.chanjar.weixin.mp.bean.WxMpMassNews; | import me.chanjar.weixin.mp.bean.WxMpMassNews; | ||||
@@ -203,12 +202,6 @@ public class WxMpServiceImpl implements WxMpService { | |||||
return jsapiSignature; | return jsapiSignature; | ||||
} | } | ||||
@Override | |||||
public void customMessageSend(WxMpCustomMessage message) throws WxErrorException { | |||||
String url = "https://api.weixin.qq.com/cgi-bin/message/custom/send"; | |||||
execute(new SimplePostRequestExecutor(), url, message.toJson()); | |||||
} | |||||
@Override | @Override | ||||
public WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException { | public WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException { | ||||
String url = "https://api.weixin.qq.com/cgi-bin/media/uploadnews"; | String url = "https://api.weixin.qq.com/cgi-bin/media/uploadnews"; | ||||
@@ -1,44 +0,0 @@ | |||||
package me.chanjar.weixin.mp.api; | |||||
import com.google.inject.Inject; | |||||
import me.chanjar.weixin.common.api.WxConsts; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; | |||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import org.testng.annotations.Guice; | |||||
import org.testng.annotations.Test; | |||||
/*** | |||||
* 测试发送客服消息 | |||||
* @author chanjarster | |||||
* | |||||
*/ | |||||
@Test(groups="customMessageAPI") | |||||
@Guice(modules = ApiTestModule.class) | |||||
public class WxMpCustomMessageAPITest { | |||||
@Inject | |||||
protected WxMpServiceImpl wxService; | |||||
public void testSendCustomMessage() throws WxErrorException { | |||||
ApiTestModule.WxXmlMpInMemoryConfigStorage configStorage = (ApiTestModule.WxXmlMpInMemoryConfigStorage) this.wxService.getWxMpConfigStorage(); | |||||
WxMpCustomMessage message = new WxMpCustomMessage(); | |||||
message.setMsgType(WxConsts.CUSTOM_MSG_TEXT); | |||||
message.setToUser(configStorage.getOpenId()); | |||||
message.setContent("欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | |||||
this.wxService.customMessageSend(message); | |||||
} | |||||
public void testSendCustomMessageWithKfAccount() throws WxErrorException { | |||||
ApiTestModule.WxXmlMpInMemoryConfigStorage configStorage = (ApiTestModule.WxXmlMpInMemoryConfigStorage) this.wxService.getWxMpConfigStorage(); | |||||
WxMpCustomMessage message = new WxMpCustomMessage(); | |||||
message.setMsgType(WxConsts.CUSTOM_MSG_TEXT); | |||||
message.setToUser(configStorage.getOpenId()); | |||||
message.setKfAccount(configStorage.getKfAccount()); | |||||
message.setContent("欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | |||||
this.wxService.customMessageSend(message); | |||||
} | |||||
} |
@@ -11,9 +11,11 @@ import org.testng.annotations.Test; | |||||
import com.google.inject.Inject; | import com.google.inject.Inject; | ||||
import me.chanjar.weixin.common.api.WxConsts; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
import me.chanjar.weixin.mp.api.ApiTestModule; | import me.chanjar.weixin.mp.api.ApiTestModule; | ||||
import me.chanjar.weixin.mp.api.ApiTestModule.WxXmlMpInMemoryConfigStorage; | import me.chanjar.weixin.mp.api.ApiTestModule.WxXmlMpInMemoryConfigStorage; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | ||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfInfo; | import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfInfo; | ||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; | import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; | ||||
@@ -35,6 +37,31 @@ public class WxMpKefuServiceImplTest { | |||||
@Inject | @Inject | ||||
protected WxMpServiceImpl wxService; | protected WxMpServiceImpl wxService; | ||||
public void testSendCustomMessage() throws WxErrorException { | |||||
ApiTestModule.WxXmlMpInMemoryConfigStorage configStorage = (ApiTestModule.WxXmlMpInMemoryConfigStorage) this.wxService | |||||
.getWxMpConfigStorage(); | |||||
WxMpCustomMessage message = new WxMpCustomMessage(); | |||||
message.setMsgType(WxConsts.CUSTOM_MSG_TEXT); | |||||
message.setToUser(configStorage.getOpenId()); | |||||
message.setContent( | |||||
"欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | |||||
this.wxService.getKefuService().customMessageSend(message); | |||||
} | |||||
public void testSendCustomMessageWithKfAccount() throws WxErrorException { | |||||
ApiTestModule.WxXmlMpInMemoryConfigStorage configStorage = (ApiTestModule.WxXmlMpInMemoryConfigStorage) this.wxService | |||||
.getWxMpConfigStorage(); | |||||
WxMpCustomMessage message = new WxMpCustomMessage(); | |||||
message.setMsgType(WxConsts.CUSTOM_MSG_TEXT); | |||||
message.setToUser(configStorage.getOpenId()); | |||||
message.setKfAccount(configStorage.getKfAccount()); | |||||
message.setContent( | |||||
"欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | |||||
this.wxService.getKefuService().customMessageSend(message); | |||||
} | |||||
public void testKfList() throws WxErrorException { | public void testKfList() throws WxErrorException { | ||||
WxMpKfList kfList = this.wxService.getKefuService().kfList(); | WxMpKfList kfList = this.wxService.getKefuService().kfList(); | ||||
Assert.assertNotNull(kfList); | Assert.assertNotNull(kfList); | ||||
@@ -123,7 +150,7 @@ public class WxMpKefuServiceImplTest { | |||||
} | } | ||||
@Test(dataProvider = "getKfAccountAndOpenid") | @Test(dataProvider = "getKfAccountAndOpenid") | ||||
public void testKfSessionGet(String kfAccount, | |||||
public void testKfSessionGet(@SuppressWarnings("unused") String kfAccount, | |||||
String openid) throws WxErrorException { | String openid) throws WxErrorException { | ||||
WxMpKfSessionGetResult result = this.wxService.getKefuService() | WxMpKfSessionGetResult result = this.wxService.getKefuService() | ||||
.kfSessionGet(openid); | .kfSessionGet(openid); | ||||
@@ -1,5 +1,9 @@ | |||||
package me.chanjar.weixin.mp.demo; | package me.chanjar.weixin.mp.demo; | ||||
import java.util.Map; | |||||
import java.util.Random; | |||||
import java.util.regex.Pattern; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
import me.chanjar.weixin.common.session.WxSession; | import me.chanjar.weixin.common.session.WxSession; | ||||
import me.chanjar.weixin.common.session.WxSessionManager; | import me.chanjar.weixin.common.session.WxSessionManager; | ||||
@@ -10,10 +14,6 @@ import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | ||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | ||||
import java.util.Map; | |||||
import java.util.Random; | |||||
import java.util.regex.Pattern; | |||||
public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMatcher { | public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMatcher { | ||||
private Random random = new Random(); | private Random random = new Random(); | ||||
@@ -57,14 +57,14 @@ public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMa | |||||
.toUser(wxMessage.getFromUserName()) | .toUser(wxMessage.getFromUserName()) | ||||
.content("请猜一个100以内的数字") | .content("请猜一个100以内的数字") | ||||
.build(); | .build(); | ||||
wxMpService.customMessageSend(m); | |||||
wxMpService.getKefuService().customMessageSend(m); | |||||
} else { | } else { | ||||
WxMpCustomMessage m = WxMpCustomMessage | WxMpCustomMessage m = WxMpCustomMessage | ||||
.TEXT() | .TEXT() | ||||
.toUser(wxMessage.getFromUserName()) | .toUser(wxMessage.getFromUserName()) | ||||
.content("放弃了吗?那请重新猜一个100以内的数字") | .content("放弃了吗?那请重新猜一个100以内的数字") | ||||
.build(); | .build(); | ||||
wxMpService.customMessageSend(m); | |||||
wxMpService.getKefuService().customMessageSend(m); | |||||
} | } | ||||
session.setAttribute("guessing", Boolean.TRUE); | session.setAttribute("guessing", Boolean.TRUE); | ||||
@@ -92,7 +92,7 @@ public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMa | |||||
.toUser(wxMessage.getFromUserName()) | .toUser(wxMessage.getFromUserName()) | ||||
.content("小了") | .content("小了") | ||||
.build(); | .build(); | ||||
wxMpService.customMessageSend(m); | |||||
wxMpService.getKefuService().customMessageSend(m); | |||||
} else if (guessNumber > answer) { | } else if (guessNumber > answer) { | ||||
WxMpCustomMessage m = WxMpCustomMessage | WxMpCustomMessage m = WxMpCustomMessage | ||||
@@ -100,7 +100,7 @@ public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMa | |||||
.toUser(wxMessage.getFromUserName()) | .toUser(wxMessage.getFromUserName()) | ||||
.content("大了") | .content("大了") | ||||
.build(); | .build(); | ||||
wxMpService.customMessageSend(m); | |||||
wxMpService.getKefuService().customMessageSend(m); | |||||
} else { | } else { | ||||
WxMpCustomMessage m = WxMpCustomMessage | WxMpCustomMessage m = WxMpCustomMessage | ||||
.TEXT() | .TEXT() | ||||
@@ -108,7 +108,7 @@ public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMa | |||||
.content("Bingo!") | .content("Bingo!") | ||||
.build(); | .build(); | ||||
session.removeAttribute("guessing"); | session.removeAttribute("guessing"); | ||||
wxMpService.customMessageSend(m); | |||||
wxMpService.getKefuService().customMessageSend(m); | |||||
} | } | ||||
} | } | ||||