155566678891313131314151515151617171818191920202121232324242525262627272929303030303031目录目录获取接口调用凭据利用AccessTokenApi获取accesstoken利用CallbackIpApi获取微信服务器IP地址发送消息客服接口-发消息CustomServiceApi高级群发接口MessageApi发送模板消息TemplateMsgApiWxaPayApiWxaPayApi公众号消息处理在spring-MVC,struts项目中整合JFinal-weixin将jfinal-weixin项目集成到主项目中jar包依赖使用Springservice层发送模板消息使用JS_SDK.
jsp更加方便的开发微信JSSDK接口目录使用示例jssdk怎么支持多公众号WxaUserApiWxaUserApiWxaTemplateApiWxaTemplateApiWxaMessageApiWxaMessageApi自定义菜单接口自定义菜单接口WxaQrcodeApiWxaQrcodeApiWxaAccessTokenApiWxaAccessTokenApiWxaMaterialApiWxaMaterialApiUserApiUserApiTemplateMsgApiTemplateMsgApiTagApiTagApi多公众号支持该示例采用多配置文件的方式实现用户管理用户分组管理设置用户备注名获取用户基本信息(UnionID机制)获取用户列表网页授权获取用户基本信息目录1/1173131313233343434343434353535373737394040404041424242424243434343434344454545464646464646464648484848首先,构造跳转到微信授权的地址通过回调地址参数code获取access_token拉取用户信息(需scope为snsapi_userinfo)小程序客服接口-发消息消息的加解密接口JCE无限制权限策略版本更新记录注意JFinalweixin2.
1Changelog【稳定版】JFinalweixin2.
0Changelog【稳定版】JFinalweixin1.
9Changelog【稳定版】JFinalweixin1.
8ChangelogJFinalweixin1.
7ChangelogJFinalWeixin1.
6ChangelogJFinalWeixin1.
5Changelog智能硬件接口APIjava类接口智能硬件消息数据统计接口用户分析数据接口图文分析数据接口消息分析数据接口接口分析数据接口微信支付相关文档Wap支付接口公众号支付js-sdkApp支付PC扫码支付微信v3公众号支付-网页端调起支付API支付过程其他API查询订单关闭订单申请退款退款查询微信支付使用总结支付宝官方文档帐号管理生成带参数的二维码QrcodeApiJFinal-weixin1.
5版本JFinal-weixin1.
6开始拼接二维码连接,可直接通过显示长链接转短链接接口ShorturlApiJFinal-weixin1.
5版本1.
6版本开始支持小程序登陆接口api接口参考示例js端目录2/1174849505152525354545557575859596161616161616162626364646464646565656565656567676868696971717575808081控制器端小程序页面二维码小程序素材接口小程序消息处理SubscribeMsgApiSubscribeMsgApi小程序支付接口SnsApiSnsApiJFinal-weixin中的WeixinConfig配置SnsAccessTokenApiSnsAccessTokenApiJFinal微信企业号CardCodeApiCardCodeApiJFinalweixin1.
6Jar依赖必须依赖的包,项目中已有的请略过可选Json处理包,必选其一,项目中已有的请略过可选包(非必须):redis分布式存储accessToken,项目中已有的请略过可选增强包okHttp,JFinal-weixin-1.
6开始支持maven依赖必须的依赖可选依赖okHttp增强,1.
6支持JFinalweixindemo和调试Home公众号文档被动消息处理接口JFinal-weixinApi接口公众号接口公众号支付相关接口公众号用户相关接口公众号客服vs消息接口公众号摇周边接口公众号卡券相关微信硬件小程序接口小程序模版消息api接口GroupsApiGroupsApiDeviceApiDeviceApiDatacubeApiDatacubeApiCustomServiceApiCustomServiceApiCardPayApiCardPayApiCardExtApi目录3/11781828285858686878788888989909093939494959597979898101101102102103103104104105105109109112112113113114114115115116116CardExtApiCardApiCardApiCallbackIpApiCallbackIpApiBlackUserApiBlackUserApiShorturlApiShorturlApiJsTicketApiJsTicketApiAutoReplyInfoApiAutoReplyInfoApiMediaApiMediaApiShakeAroundUserApiShakeAroundUserApiShakeAroundStatisticsApiShakeAroundStatisticsApiShakeAroundPageApiShakeAroundPageApiShakeAroundMaterialApiShakeAroundMaterialApiShakeAroundDeviceApiShakeAroundDeviceApiShakeAroundAccountApiShakeAroundAccountApiSemanticApiSemanticApiRedPackApiRedPackApiQrcodeApiQrcodeApiPoiApiPoiApiPaymentApiPaymentApiOAuth-code授权异常处理逻辑过程:MenuApiMenuApiMessageApiMessageApiAccessTokenApiAccessTokenApiMemberCardApiMemberCardApi目录4/117/***直接获取accessToken字符串,方便使用*@returnStringaccessToken*/AccessTokenApi.
getAccessTokenStr();/***从缓存中获取accesstoken,如果未取到或者accesstoken不可用则先更新再获取*@returnAccessTokenaccessToken*/AccessTokenApi.
getAccessToken();/***获取微信服务器IP地址*returnApiResult*/CallbackIpApi.
getCallbackIp();正常返回:{"ip_list":["127.
0.
0.
1","127.
0.
0.
1"]}获取接口调用凭据获取接口调用凭据利用AccessTokenApi获取accesstoken利用AccessTokenApi获取accesstoken利用CallbackIpApi获取微信服务器IP地址利用CallbackIpApi获取微信服务器IP地址获取接口调用凭据5/117/***发送文本客服消息*@paramopenId*@paramtext*/publicstaticApiResultsendText(StringopenId,Stringtext);/***发送图片消息*@paramopenId*@parammedia_id*@return*/publicstaticApiResultsendImage(StringopenId,Stringmedia_id);/***发送语言回复*@paramopenId*@parammedia_id*@return*/publicstaticApiResultsendVoice(StringopenId,Stringmedia_id);/***发送视频回复*@paramopenId*@parammedia_id*@paramtitle*@paramdescription*@return*/publicstaticApiResultsendVideo(StringopenId,Stringmedia_id,Stringtitle,Stringdescription);/***发送音乐回复*@paramopenId*@parammusicurl*@paramhqmusicurl*@paramthumb_media_id*@paramtitle*@paramdescription*@return*/publicstaticApiResultsendMusic(StringopenId,Stringmusicurl,Stringhqmusicurl,Stringthumb_media_id,Stringtitle,Stringdescription);/***发送图文回复*@paramopenId*@paramarticles*@return*/publicstaticApiResultsendNews(StringopenId,Listarticles);/***发送卡券*@paramopenId*@paramcard_id*@paramcard_ext详情及签名规则:http://mp.
weixin.
qq.
com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.
html#.
E9.
99.
84.
E5.
BD.
954-.
E5.
8D.
A1.
E5.
88.
B8.
E6.
89.
A*@return*/publicstaticApiResultsendCoupon(StringopenId,Stringcard_id,Stringcard_ext);发送消息发送消息客服接口-发消息客服接口-发消息CustomServiceApi高级群发接口高级群发接口MessageApi发送消息6/117/***根据分组进行群发【订阅号与服务号认证后均可用】*@paramjsonStr*@return*/publicstaticApiResultsendAll(StringjsonStr);/***根据OpenID列表群发【订阅号不可用,服务号认证后可用】*@paramjsonStr*@return*/publicstaticApiResultsend(StringjsonStr);/***预览接口【订阅号与服务号认证后均可用】*@paramjsonStr*@return*/publicstaticApiResultpreview(StringjsonStr);/***查询群发消息发送状态【订阅号与服务号认证后均可用】*@parammsgId群发消息后返回的消息id*@returnApiResult*/publicstaticApiResultget(StringmsgId);/***删除群发【订阅号与服务号认证后均可用】*由于技术限制,群发只有在刚发出的半小时内可以删除,发出半小时之后将无法被删除.
*@parammsgId群发消息后返回的消息id*@returnApiResult*/publicstaticApiResultdelete(StringmsgId);//模板消息,发送测试:passApiResultresult=TemplateMsgApi.
send(TemplateData.
New()//消息接收者.
setTouser("oOGf-jgjmwxFVU66D-lFO2AFK8ic")//模板id.
setTemplate_id("UsOTFJfm7-XfskPd5p2wlBXYUjdwjUTZxnMXbOfVQ0A").
setTopcolor("#eb414a").
setUrl("http://m.
xxxx.
cn/qrcode/t/xxxxxx")//模板参数.
add("first","验票成功!
\n","#999").
add("keyword1","xxxxxx","#999").
add("keyword2","2014年12月27日19:30","#999").
add("keyword3","xxxxx","#999").
add("keyword4","xxxxxxxx","#999").
add("keyword5","xxx元","#999").
add("remark","\nxxxxxxxxxx.
","#999").
build());System.
out.
println(result);可在WeixinMsgController中接受模板消息的事件publicvoidprocessInTemplateMsgEvent(InTemplateMsgEventinTemplateMsgEvent){}文档地址:http://mp.
weixin.
qq.
com/wiki/17/304c1885ea66dbedf7dc170d84999a9d.
html发送模板消息发送模板消息TemplateMsgApi发送消息7/117小程序支付接口/**小程序统一下单@paramorder小程序支付订单信息封装@throwsPaymentException支付异常@returnMap*/WxaPayApiwxaPayApi=Duang.
duang(WxaPayApi.
class);Mapmap=wxaPayApi.
unifiedOrder(WxaOrderorder);WxaPayApiWxaPayApiWxaPayApiWxaPayApiWxaPayApi8/117需要继承MsgControllerAdapter,实现你想处理的消息接口.
/***处理接收到的文本消息*@paraminTextMsg处理接收到的文本消息*/protectedvoidprocessInTextMsg(InTextMsginTextMsg);/***处理接收到的图片消息*@paraminImageMsg处理接收到的图片消息*/protectedvoidprocessInImageMsg(InImageMsginImageMsg);/***处理接收到的语音消息*@paraminVoiceMsg处理接收到的语音消息*/protectedvoidprocessInVoiceMsg(InVoiceMsginVoiceMsg);/***处理接收到的视频消息*@paraminVideoMsg处理接收到的视频消息*/protectedvoidprocessInVideoMsg(InVideoMsginVideoMsg);/***处理接收到的小视频消息*@paraminShortVideoMsg处理接收到的小视频消息*/protectedvoidprocessInShortVideoMsg(InShortVideoMsginShortVideoMsg);/***处理接收到的地址位置消息*@paraminLocationMsg处理接收到的地址位置消息*/protectedvoidprocessInLocationMsg(InLocationMsginLocationMsg);/***处理接收到的链接消息*@paraminLinkMsg处理接收到的链接消息*/protectedvoidprocessInLinkMsg(InLinkMsginLinkMsg);/***处理接收到的多客服管理事件*@paraminCustomEvent处理接收到的多客服管理事件*/protectedvoidprocessInCustomEvent(InCustomEventinCustomEvent);/***处理接收到的关注/取消关注事件*@paraminFollowEvent处理接收到的关注/取消关注事件*/protectedvoidprocessInFollowEvent(InFollowEventinFollowEvent);/***处理接收到的扫描带参数二维码事件*@paraminQrCodeEvent处理接收到的扫描带参数二维码事件*/protectedvoidprocessInQrCodeEvent(InQrCodeEventinQrCodeEvent);/***处理接收到的上报地理位置事件*@paraminLocationEvent处理接收到的上报地理位置事件*/protectedvoidprocessInLocationEvent(InLocationEventinLocationEvent);公众号消息处理公众号消息处理公众号消息处理9/117/***处理接收到的群发任务结束时通知事件*@paraminMassEvent处理接收到的群发任务结束时通知事件*/protectedvoidprocessInMassEvent(InMassEventinMassEvent);/***处理接收到的自定义菜单事件*@paraminMenuEvent处理接收到的自定义菜单事件*/protectedvoidprocessInMenuEvent(InMenuEventinMenuEvent);/***处理接收到的语音识别结果*@paraminSpeechRecognitionResults处理接收到的语音识别结果*/protectedvoidprocessInSpeechRecognitionResults(InSpeechRecognitionResultsinSpeechRecognitionResults);/***处理接收到的模板消息是否送达成功通知事件*@paraminTemplateMsgEvent处理接收到的模板消息是否送达成功通知事件*/protectedvoidprocessInTemplateMsgEvent(InTemplateMsgEventinTemplateMsgEvent);/***处理微信摇一摇事件*@paraminShakearoundUserShakeEvent处理微信摇一摇事件*/protectedvoidprocessInShakearoundUserShakeEvent(InShakearoundUserShakeEventinShakearoundUserShakeEvent);/***资质认证成功||名称认证成功||年审通知||认证过期失效通知*@paraminVerifySuccessEvent资质认证成功||名称认证成功||年审通知||认证过期失效通知*/protectedvoidprocessInVerifySuccessEvent(InVerifySuccessEventinVerifySuccessEvent);/***资质认证失败||名称认证失败*@paraminVerifyFailEvent资质认证失败||名称认证失败*/protectedvoidprocessInVerifyFailEvent(InVerifyFailEventinVerifyFailEvent);/***门店在审核事件消息*@paraminPoiCheckNotifyEvent门店在审核事件消息*/protectedvoidprocessInPoiCheckNotifyEvent(InPoiCheckNotifyEventinPoiCheckNotifyEvent);/***WIFI连网后下发消息byunasat2016-1-29*@paraminWifiEventWIFI连网后下发消息*/protectedvoidprocessInWifiEvent(InWifiEventinWifiEvent);/***1.
微信会员卡二维码扫描领取接口*2.
微信会员卡激活接口*3.
卡券删除事件推送*4.
从卡券进入公众号会话事件推送*@paraminUserCardEventInUserCardEvent*/protectedvoidprocessInUserCardEvent(InUserCardEventinUserCardEvent);/***微信会员卡积分变更*@paraminUpdateMemberCardEvent微信会员卡积分变更*/protectedvoidprocessInUpdateMemberCardEvent(InUpdateMemberCardEventinUpdateMemberCardEvent);/**公众号消息处理10/117*微信会员卡快速买单*@paraminUserPayFromCardEvent微信会员卡快速买单*/protectedvoidprocessInUserPayFromCardEvent(InUserPayFromCardEventinUserPayFromCardEvent);/***微信小店订单支付成功接口消息*@paraminMerChantOrderEvent微信小店订单支付成功接口消息*/protectedvoidprocessInMerChantOrderEvent(InMerChantOrderEventinMerChantOrderEvent);///***没有找到对应的事件消息*@paraminNotDefinedEvent没有对应的事件消息*/protectedvoidprocessIsNotDefinedEvent(InNotDefinedEventinNotDefinedEvent);/***没有找到对应的消息*@paraminNotDefinedMsg没有对应消息*/protectedvoidprocessIsNotDefinedMsg(InNotDefinedMsginNotDefinedMsg);/***卡券转赠事件推送*@parammsg卡券转赠事件推送*/protectedvoidprocessInUserGiftingCardEvent(InUserGiftingCardEventmsg);/***卡券领取事件推送*@parammsg卡券领取事件推送*/protectedvoidprocessInUserGetCardEvent(InUserGetCardEventmsg);/***卡券核销事件推送*@parammsg卡券核销事件推送*/protectedvoidprocessInUserConsumeCardEvent(InUserConsumeCardEventmsg);/***卡券库存报警事件*@parammsg卡券库存报警事件*/protectedvoidprocessInCardSkuRemindEvent(InCardSkuRemindEventmsg);/***券点流水详情事件*@parammsg券点流水详情事件*/protectedvoidprocessInCardPayOrderEvent(InCardPayOrderEventmsg);/***审核事件推送*@parammsg审核事件推送*/protectedvoidprocessInCardPassCheckEvent(InCardPassCheckEventmsg);/***处理微信硬件绑定和解绑事件*@parammsg处理微信硬件绑定和解绑事件*/protectedvoidprocessInEqubindEvent(InEqubindEventmsg);/***处理微信硬件发来数据*@parammsg处理微信硬件发来数据*/protectedvoidprocessInEquDataMsg(InEquDataMsgmsg);公众号消息处理11/117/***方便没有使用的api返回""避免出现,该公众号暂时不能提供服务**可重写该方法,回复通用话术*/protectedvoidrenderDefault();公众号消息处理12/117注意:其他框架同理如下.
jfinalcom.
jfinal.
core.
JFinalFilterconfigClassdemo.
DemoConfigjfinal/weixin/*注意:/weixin/*,另外将这个filter提到web.
xml的最前面,避免被拦截.
web.
xml中添加如上面的配置.
Spring-boot配置,注意url-pattern这块需要和JFinalConfig中的前缀保持一致;me.
add("/weixin/msg",WeixinMsgController.
class);me.
add("/weixin/api",WeixinApiController.
class,"/api");me.
add("/weixin/pay",WeixinPayController.
class);JFinalConfig中添加如上配置.
JFinal-weixin-Jar依赖:http://git.
oschina.
net/jfinal/jfinal-weixin/wikis/JFinal-weixin-1.
6-Jar%E4%BE%9D%E8%B5%96soeasy的,加一个这个http://git.
oschina.
net/wangzhixuan/spring-shiro-training/blob/master/src/main/java/com/wangzhixuan/commons/scan/SpringUtils.
java你们项目也许有类似获取SpringBean的.
注意:该工具类需要被spring扫描或者在xml中配置.
直接在你的WeixinMsgController控制器上写:privateXxxxServicexxxxService=SpringUtils.
getBean(XxxxService.
class);在spring-MVC,struts项目中整合JFinal-weixin在spring-MVC,struts项目中整合JFinal-weixin将jfinal-weixin项目集成到主项目中将jfinal-weixin项目集成到主项目中jar包依赖jar包依赖使用Springservice层使用Springservice层在spring-MVC,struts项目中整合JFinal-weixin13/117//模板消息,发送测试:passApiResultresult=TemplateMsgApi.
send(TemplateData.
New()//消息接收者.
setTouser("oOGf-jgjmwxFVU66D-lFO2AFK8ic")//模板id.
setTemplate_id("UsOTFJfm7-XfskPd5p2wlBXYUjdwjUTZxnMXbOfVQ0A").
setTopcolor("#eb414a").
setUrl("http://m.
xxxx.
cn/qrcode/t/xxxxxx")//模板参数.
add("first","验票成功!
\n","#999").
add("keyword1","xxxxxx","#999").
add("keyword2","2014年12月27日19:30","#999").
add("keyword3","xxxxx","#999").
add("keyword4","xxxxxxxx","#999").
add("keyword5","xxx元","#999").
add("remark","\nxxxxxxxxxx.
","#999").
build());System.
out.
println(result);可在WeixinMsgController中接受模板消息的事件publicvoidprocessInTemplateMsgEvent(InTemplateMsgEventinTemplateMsgEvent){}文档地址:http://mp.
weixin.
qq.
com/wiki/17/304c1885ea66dbedf7dc170d84999a9d.
html发送模板消息发送模板消息发送模板消息14/117JFinal-weixin1.
5中添加了JS_SDK.
jsp,她已经完成了对config接口注入的权限验证配置!
JS_SDK.
jspvstest.
jsp位于源码包:/webapp/jsp/目录中.
varshareData={title:shareTitle,desc:config.
content,link:shareURL,imgUrl:shareIMG};如需使用摇一摇周边功能,请升级为jweixin-1.
1.
0.
jsjs_sdk.
jsp中含有默认的分享信息,可适当的配置,起到全局的默认分享效果!
也可以像上面那样先定义好分享的jsshareData对象,js_sdk.
jsp中就不会默认配置它们!
test.
jsp中含有完整的示例供大家参考,或者用于测试阶段!
注意:所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名".
完整JS-SDK文档地址:http://mp.
weixin.
qq.
com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.
html使用JS_SDK.
jsp更加方便的开发微信JSSDK接口使用JS_SDK.
jsp更加方便的开发微信JSSDK接口目录目录使用使用示例示例使用JS_SDK.
jsp更加方便的开发微信JSSDK接口15/117注意:JFinal-weixin1.
9已经默认支持,URL直接添加参数appId=xxx即可!
具体思路为:在引jsp的时候加上一个appid参数.
src="http://xxxx/js_sdk.
jspappid=xxx"xxx可以从你那个请求中获取!
然后就跟控制器那一套一样处理,从数据库中或者多配置文件中读取!
注意:需要自己改动js_sdk.
jsp部分代码jssdk怎么支持多公众号jssdk怎么支持多公众号jssdk怎么支持多公众号16/117微信小程序用户api接口/**获取sessionKey@paramjsCode登录时获取的code@returnApiResult*/WxaUserApiwxaUserApi=Duang.
duang(WxaUserApi.
class);ApiResultapiResult=wxaUserApi.
getSessionKey(StringjsCode);/**解密用户敏感数据@paramsessionKey会话密钥@paramencryptedData明文@paramivStr加密算法的初始向量@return{ApiResult}*/WxaUserApiwxaUserApi=Duang.
duang(WxaUserApi.
class);ApiResultapiResult=wxaUserApi.
getUserInfo(StringsessionKey,StringencryptedData,StringivStr);/**验证用户信息完整性@paramsessionKey会话密钥@paramrawData微信用户基本信息@paramsignature数据签名@return{boolean}*/WxaUserApiwxaUserApi=Duang.
duang(WxaUserApi.
class);booleanboolean=wxaUserApi.
checkUserInfo(StringsessionKey,StringrawData,Stringsignature);WxaUserApiWxaUserApiWxaUserApiWxaUserApiWxaUserApi17/117微信小程序模版消息/**发送模板消息@paramjsonStr模版json@return{ApiResult}*/WxaTemplateApiwxaTemplateApi=Duang.
duang(WxaTemplateApi.
class);ApiResultapiResult=wxaTemplateApi.
send(StringjsonStr);/**发送模板消息@paramtemplate模版对象@return{ApiResult}*/WxaTemplateApiwxaTemplateApi=Duang.
duang(WxaTemplateApi.
class);ApiResultapiResult=wxaTemplateApi.
send(WxaTemplatetemplate);WxaTemplateApiWxaTemplateApiWxaTemplateApiWxaTemplateApiWxaTemplateApi18/117客服接口-发消息/**发送文本客服消息@paramopenIdopenId@paramtext文本消息@returnApiResult*/WxaMessageApiwxaMessageApi=Duang.
duang(WxaMessageApi.
class);ApiResultapiResult=wxaMessageApi.
sendText(StringopenId,Stringtext);/**发送图片消息@paramopenIdopenId@parammediaId图片媒体id@returnApiResult*/WxaMessageApiwxaMessageApi=Duang.
duang(WxaMessageApi.
class);ApiResultapiResult=wxaMessageApi.
sendImage(StringopenId,StringmediaId);WxaMessageApiWxaMessageApiWxaMessageApiWxaMessageApiWxaMessageApi19/117注意:微信菜单有24小时缓存,添加或者修改菜单之后,请重新关注然后查看.
/***查询菜单*/MenuApi.
getMenu();/***创建菜单*/MenuApi.
createMenu(StringjsonStr);/***自定义菜单删除接口*/MenuApi.
deleteMenu();##个性化菜单接口/***创建个性化菜单*@paramjsonStr*@return*/publicstaticApiResultaddConditional(StringjsonStr);/***删除个性化菜单*@parammenuidmenuid为菜单id,可以通过自定义菜单查询接口获取.
*@returnApiResult*/publicstaticApiResultdelConditional(Stringmenuid);/***测试个性化菜单匹配结果*@paramuserIduser_id可以是粉丝的OpenID,也可以是粉丝的微信号.
*@returnApiResult*/publicstaticApiResulttryMatch(StringuserId);/***获取自定义菜单配置接口*/publicstaticApiResultgetCurrentSelfMenuInfo();自定义菜单接口自定义菜单接口自定义菜单接口自定义菜单接口自定义菜单接口20/117微信二维码api/**获取小程序码接口A:适用于需要的码数量较少的业务场景width默认430@parampath不能为空,最大长度128字节@returnInputStream*/WxaQrcodeApiwxaQrcodeApi=Duang.
duang(WxaQrcodeApi.
class);InputStreaminputStream=wxaQrcodeApi.
get(Stringpath);/**获取小程序码接口A:适用于需要的码数量较少的业务场景@parampath不能为空,最大长度128字节@paramwidth默认430@returnInputStream*/WxaQrcodeApiwxaQrcodeApi=Duang.
duang(WxaQrcodeApi.
class);InputStreaminputStream=wxaQrcodeApi.
get(Stringpath,intwidth);/**获取小程序码接口A:适用于需要的码数量较少的业务场景width默认430@parampath不能为空,最大长度128字节@paramwidth默认430@paramr颜色R@paramg颜色R@paramb颜色B@returnInputStream*/WxaQrcodeApiwxaQrcodeApi=Duang.
duang(WxaQrcodeApi.
class);InputStreaminputStream=wxaQrcodeApi.
get(Stringpath,intwidth,Stringr,Stringg,Stringb);/**获取小程序码接口B:适用于需要的码数量极多,或仅临时使用的业务场景@paramscene场景@parampath不能为空,最大长度128字节@returnInputStream*/WxaQrcodeApiwxaQrcodeApi=Duang.
duang(WxaQrcodeApi.
class);InputStreaminputStream=wxaQrcodeApi.
getUnLimit(Stringscene,Stringpath);/**获取小程序码接口B:适用于需要的码数量极多,或仅临时使用的业务场景WxaQrcodeApiWxaQrcodeApiWxaQrcodeApiWxaQrcodeApiWxaQrcodeApi21/117@paramscene场景@parampath不能为空,最大长度128字节@paramwidth默认430@returnInputStream*/WxaQrcodeApiwxaQrcodeApi=Duang.
duang(WxaQrcodeApi.
class);InputStreaminputStream=wxaQrcodeApi.
getUnLimit(Stringscene,Stringpath,intwidth);/**获取小程序码接口B:适用于需要的码数量极多,或仅临时使用的业务场景@paramscene场景@parampath不能为空,最大长度128字节@paramwidth默认430@paramr颜色R@paramg颜色R@paramb颜色B@returnInputStream*/WxaQrcodeApiwxaQrcodeApi=Duang.
duang(WxaQrcodeApi.
class);InputStreaminputStream=wxaQrcodeApi.
getUnLimit(Stringscene,Stringpath,intwidth,Stringr,Stringg,Stringb);/**获取小程序页面二维码通过该接口,仅能生成已发布的小程序的二维码.
可以在开发者工具预览时生成开发版的带参二维码.
带参二维码只有100000个,请谨慎调用.
width默认430@parampath不能为空,最大长度128字节@returnInputStream*/WxaQrcodeApiwxaQrcodeApi=Duang.
duang(WxaQrcodeApi.
class);InputStreaminputStream=wxaQrcodeApi.
createQrcode(Stringpath);/**获取小程序页面二维码通过该接口,仅能生成已发布的小程序的二维码.
可以在开发者工具预览时生成开发版的带参二维码.
带参二维码只有100000个,请谨慎调用.
@parampath不能为空,最大长度128字节@paramwidth默认430二维码的宽度@returnInputStream*/WxaQrcodeApiwxaQrcodeApi=Duang.
duang(WxaQrcodeApi.
class);InputStreaminputStream=wxaQrcodeApi.
createQrcode(Stringpath,intwidth);WxaQrcodeApi22/117小程序access_token/**从缓存中获取accesstoken,如果未取到或者accesstoken不可用则先更新再获取@returnWxaAccessTokenaccessToken*/WxaAccessTokenwxaAccessToken=WxaAccessTokenApi.
getAccessToken();/**直接获取accessToken字符串,方便使用@returnStringaccessToken*/Stringstring=WxaAccessTokenApi.
getAccessTokenStr();/**无条件强制更新accesstoken值,不再对cache中的token进行判断@returnWxaAccessToken*/WxaAccessTokenwxaAccessToken=WxaAccessTokenApi.
refreshAccessToken();/**无条件强制更新accesstoken值,不再对cache中的token进行判断@paramwcWxaConfig@returnWxaAccessToken*/WxaAccessTokenwxaAccessToken=WxaAccessTokenApi.
refreshAccessToken(WxaConfigwc);WxaAccessTokenApiWxaAccessTokenApiWxaAccessTokenApiWxaAccessTokenApiWxaAccessTokenApi23/117小程序材料接口/**获取临时素材@parammediaId素材Id@returnMediaFile*/WxaMaterialApiwxaMaterialApi=Duang.
duang(WxaMaterialApi.
class);MediaFilemediaFile=wxaMaterialApi.
getMedia(StringmediaId);/**上传临时素材@paramfile需要上传的文件@paramtypeimage@returnApiResult*/WxaMaterialApiwxaMaterialApi=Duang.
duang(WxaMaterialApi.
class);ApiResultapiResult=wxaMaterialApi.
uploadMedia(Filefile,Stringtype);WxaMaterialApiWxaMaterialApiWxaMaterialApiWxaMaterialApiWxaMaterialApi24/117用户管理APIhttps://api.
weixin.
qq.
com/cgi-bin/user/infoaccess_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN/**获取用户基本信息(包括UnionID机制)@paramopenId普通用户的标识,对当前公众号唯一@returnApiResult*/ApiResultapiResult=UserApi.
getUserInfo(StringopenId);/**获取用户列表@paramnextOpenid第一个拉取的OPENID,不填默认从头开始拉取@returnApiResult*/ApiResultapiResult=UserApi.
getFollowers(StringnextOpenid);/**获取用户列表@returnApiResult*/ApiResultapiResult=UserApi.
getFollows();/**批量获取用户基本信息,byUnas@paramjsonStrjson字符串@returnApiResult*/ApiResultapiResult=UserApi.
batchGetUserInfo(StringjsonStr);/**批量获取用户基本信息@paramopenIdListopenid列表@returnApiResult*/ApiResultapiResult=UserApi.
batchGetUserInfo(java.
util.
ListopenIdList);/**设置备注名@paramopenid用户标识@paramremark新的备注名,长度必须小于30字符@return{ApiResult}*/ApiResultapiResult=UserApi.
updateRemark(Stringopenid,Stringremark);UserApiUserApiUserApiUserApiUserApi25/117模板消息API文档地址:http://mp.
weixin.
qq.
com/wiki/17/304c1885ea66dbedf7dc170d84999a9d.
html/**发送模板消息@paramjsonStrjson字符串@return{ApiResult}*/ApiResultapiResult=TemplateMsgApi.
send(StringjsonStr);/**设置所属行业@paramindustry_id1公众号模板消息所属行业编号@paramindustry_id2公众号模板消息所属行业编号@return{ApiResult}*/ApiResultapiResult=TemplateMsgApi.
setIndustry(Stringindustry_id1,Stringindustry_id2);/**获取设置的行业信息@return{ApiResult}*/ApiResultapiResult=TemplateMsgApi.
getIndustry();/**获得模板ID@paramtemplateIdShort模板库中模板的编号,有"TM**"和"OPENTMTM**"等形式@return{ApiResult}*/ApiResultapiResult=TemplateMsgApi.
getTemplateId(StringtemplateIdShort);/**获取模板列表@return{ApiResult}*/ApiResultapiResult=TemplateMsgApi.
getAllTemplate();/**删除模板@paramtemplateId公众帐号下模板消息ID@return{ApiResult}*/ApiResultapiResult=TemplateMsgApi.
delTemplateById(StringtemplateId);TemplateMsgApiTemplateMsgApiTemplateMsgApiTemplateMsgApiTemplateMsgApi26/117用户标签接口/**@paramname标签名(30个字符以内)@return{ApiResult}*/ApiResultapiResult=TagApi.
create(Stringname);/**获取公众号已创建的标签@return{ApiResult}*/ApiResultapiResult=TagApi.
get();/**编辑标签@paramid标签id@paramname标签名@return{ApiResult}*/ApiResultapiResult=TagApi.
update(intid,Stringname);/**删除标签@paramid标签id@return{ApiResult}*/ApiResultapiResult=TagApi.
delete(intid);/**根据标签获取标签下粉丝列表@paramtagId标签id@return{ApiResult}*/ApiResultapiResult=TagApi.
getUser(inttagId);/**根据标签获取标签下粉丝列表@paramtagId标签id@paramnextOpenId第一个拉取的OPENID,不填默认从头开始拉取@return{ApiResult}*/ApiResultapiResult=TagApi.
getUser(inttagId,StringnextOpenId);/**批量为用户打标签@paramtagId标签id@paramopenIdListopenid列表@return{ApiResult}*/ApiResultapiResult=TagApi.
batchAddTag(inttagId,java.
util.
ListopenIdList);/**TagApiTagApiTagApiTagApiTagApi27/117批量为用户取消标签@paramtagId标签id@paramopenIdListopenid列表@return{ApiResult}*/ApiResultapiResult=TagApi.
batchDelTag(inttagId,java.
util.
ListopenIdList);/**获取用户身上的标签列表@paramopenIdopenid@return{ApiResult}*/ApiResultapiResult=TagApi.
getUser(StringopenId);TagApi28/117JFinal-weixin1.
9版本默认url挂参数appId即可.
JFinal-weixin1.
8和之前版本配置文件以appid命名(appid.
txt)里面内容的格式跟demo中的一样.
然后呢继承MsgControllerAdapter或者MsgController或者ApiController重写getApiConfig方法.
代码来了:/***如果要支持多公众账号,只需要在此返回各个公众号对应的ApiConfig对象即可*可以通过在请求url中挂参数来动态从数据库中获取ApiConfig属性值*/publicApiConfiggetApiConfig(){Stringappid=getPara("appid","默认的appid");Propprop=PropKit.
use(appid+".
txt");ApiConfigac=newApiConfig();//配置微信API相关常量ac.
setToken(prop.
get("token"));ac.
setAppId(prop.
get("appId"));ac.
setAppSecret(prop.
get("appSecret"));/***是否对消息进行加密,对应于微信平台的消息加解密方式:*1:true进行加密且必须配置encodingAesKey*2:false采用明文模式,同时也支持混合模式*/ac.
setEncryptMessage(prop.
getBoolean("encryptMessage",false));ac.
setEncodingAesKey(prop.
get("encodingAesKey","settingitinconfigfile"));returnac;}url可以是这样:/weixin/api/getMenuappid=xxx同理msg的可直接配置:/weixin/msg/xxx然后将上面的代码getPara("appid","默认的appid");//改成Stringappid=getPara();if(StrKit.
isBlank(appid)){appid="你默认的appid";}当然这只是一种实现方式,你也可以采用数据库去!
大致思路和这个类似多公众号支持多公众号支持该示例采用多配置文件的方式实现该示例采用多配置文件的方式实现多公众号支持29/117/***创建分组,一个公众账号,最多支持创建100个分组.
*@paramname分组名*/GroupsApi.
create(Stringname);/***查询所有分组*/GroupsApi.
get();/***通过用户的OpenID查询其所在的GroupID*@paramopenid普通用户的标识,对当前开发者帐号唯一*/GroupsApi.
getId(Stringopenid);/***修改分组名*@paramid分组id,由微信分配*@paramname分组名字(30个字符以内)*/GroupsApi.
update(intid,Stringname);/***移动用户分组*@paramopenid用户唯一标识符*@paramto_groupid分组id*/GroupsApi.
membersUpdate(Stringopenid,intto_groupid);/***批量移动用户分组*@paramopenidList用户唯一标识符openid的列表(size不能超过50)*@paramto_groupid分组id*/GroupsApi.
membersBatchUpdate(ListopenidList,intto_groupid);/***删除分组*@paramid分组的id*/GroupsApi.
delete(intid);/***设置备注名*@paramopenid用户标识*@paramremark新的备注名,长度必须小于30字符*/UserApi.
updateRemark(openid,remark);//普通用户的标识,对当前开发者帐号唯一UserApi.
getUserInfo(openId);用户管理用户管理用户分组管理用户分组管理设置用户备注名设置用户备注名获取用户基本信息(UnionID机制)获取用户基本信息(UnionID机制)获取用户列表获取用户列表用户管理30/117/***获取用户列表*@paramnextOpenid第一个拉取的OPENID,不填默认从头开始拉取*/UserApi.
getFollowers(StringnextOpenid);/***获取用户列表*/UserApi.
getFollows();/***生成Authorize链接*@paramappId应用id*@paramredirect_uri回跳地址*@paramsnsapiBase时候完全信息*@returnurl*/SnsAccessTokenApi.
getAuthorizeURL(appId,redirect_uri,snsapiBase);/***通过code获取access_token*@paramcode第一步获取的code参数*@paramappId应用唯一标识*@paramsecret应用密钥AppSecret*@returnSnsAccessToken*/SnsAccessTokenApi.
getSnsAccessToken(appId,secret,code);//上一步中获取到的accessToken和openIdSnsApi.
getUserInfo(accessToken,openId)网页授权获取用户基本信息网页授权获取用户基本信息首先,构造跳转到微信授权的地址首先,构造跳转到微信授权的地址通过回调地址参数code获取access_token通过回调地址参数code获取access_token拉取用户信息(需scope为snsapi_userinfo)拉取用户信息(需scope为snsapi_userinfo)用户管理31/117/***发送客服消息*@parammessage消息封装*@returnApiResult*/wxaMessageApi.
sendMsg(Mapmessage);/***发送文本客服消息*@paramopenIdopenId*@paramtext文本消息*@returnApiResult*/wxaMessageApi.
sendText(StringopenId,Stringtext);/***发送图片消息*@paramopenIdopenId*@parammediaId图片媒体id*@returnApiResult*/wxaMessageApi.
sendImage(StringopenId,StringmediaId);小程序客服接口-发消息小程序客服接口-发消息小程序客服接口-发消息32/117/***提供接收和推送给公众平台消息的加解密接口(UTF8编码的字符串).
**第三方回复加密消息给公众平台*第三方收到公众平台发送的消息,验证消息的安全性,并对消息进行解密.
**说明:异常java.
security.
InvalidKeyException:illegalKeySize的解决方案**在官方网站下载JCE无限制权限策略文件*下载后解压,可以看到local_policy.
jar和US_export_policy.
jar以及readme.
txt*如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件*如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件**/JDK7版本JCE下载地址:http://www.
oracle.
com/technetwork/java/javase/downloads/jce-7-download-432124.
htmlJDK8版本JCE下载地址:http://www.
oracle.
com/technetwork/java/javase/downloads/jce8-download-2133166.
html消息的加解密接口JCE无限制权限策略消息的加解密接口JCE无限制权限策略消息的加解密接口JCE无限制权限策略33/117最新版本的会进行bug修复,建议大家尽量升级到最新版本,另外发现bug请及时反馈,谢谢!
JFinalweixin2.
1使用到了JFinal3.
4的工具类.
建议升级到JFinal3.
4!
改进XmlHelper,防止JDK的XMLAPI被实施XXE攻击添加一次性订阅消息接口SubscribeMsgApiInFollowEvent添加EventKey属性添加AccessToken.
setAccessToken(.
.
)用于手动设置AccessTokenMediaApi添加batchGetMaterial()、batchGetMaterialNews()ReturnCode添加与发票相关的返回码ApiResult添加getAttrs()依赖jfinal的scope改为provided修改微信官方提供的WXBizMsgCrypt.
java中的一处字符串比较的问题修复完善小程序二维码创建接口修复微信周边摇一摇上传图片素材接口去掉Base64Utils建议使用JFinal3.
4中的Base64Kit修改JsonUtils,优先使用用户设定的JsonUtils.
setJsonFactory,用户没有手动设定,使用JFinal中设定的,不再建议外部使用该类.
图文消息添加评论字段修复WxaTemplateApi中的一处bug#75ApiConfigKit多公众号配置改进,老用户需要微调代码.
@冷焰心提供.
可采用url挂参数appId=xxx切换多公众号.
#82MsgController抽象方法的不便@loogn反馈.
#83微信AccessTokenCache存储问题@loogn反馈(已修改redis的key串,可直接升级).
#93RetryUtils中retryonexception空指针问题@uestcdengww反馈.
#91AccessTokenApi的refreshAccessToken()判断bug修复.
InNotDefinedMsg和InNotDefinedEvent中添加xmlHelper参数(xpath语法获取xml中的参数),用于用户扩展JFinal-weixin不支持的消息和事件.
感谢@长篇小说提出的问题和红包!
js_sdk.
jsp添加参数appId、test,可采用appId=xxx&test=true挂参支持多公众号和JS-SDK测试模式!
新增LocalTestTokenCache用于本地和线上同时使用一套appId时避免本地将线上AccessToken冲掉!
注意:生产环境请勿使用!
#102授权请求使用强匹配照成的无法正常访问,感谢光速蜗牛反馈添加上传图文消息素材接口,感谢爱、已搁浅反馈添加模版的管理接口添加小程序接口和WIKI添加高清语音素材获取接口完善卡券系列接口,依赖jfinal3.
0建议升级到jfinal3.
0.
添加门店相关接口by@fuyong添加黑名单接口by@fuyong添加微信智能硬件接口by@积淀贡献#46去掉freemarker依赖,感谢@亻紫菜彡的意见添加个性化菜单接口添加微信支付对账单接口添加没有找到对应的消息和事件消息的自定义处理#50增加微信连WIFI联网后下发消息事件版本更新记录版本更新记录注意JFinalweixin2.
1Changelog【稳定版】JFinalweixin2.
1Changelog【稳定版】JFinalweixin2.
0Changelog【稳定版】JFinalweixin2.
0Changelog【稳定版】JFinalweixin1.
9Changelog【稳定版】JFinalweixin1.
9Changelog【稳定版】JFinalweixin1.
8ChangelogJFinalweixin1.
8Changelog版本更新记录34/117fixed客服接口,删除客服帐号添加获取自动回复规则更新ReturnCode#53新增将消息转发到指定客服#48更改pom.
xml,打jar包时排除demo目录#55添加"获取在线客服接待信息"新增发送图文消息(点击跳转到图文消息页面)添加微信红包接口,感谢@osc余书慧童鞋的贡献#58BugsearchByDevice感谢@12叔#57ApiConfig实现序列化,方便缓存感谢@Jimmy哥企业付款demoWeixinTransfersController感谢@authorosc就看看新增微信支付PC-模式一(感谢@Javen205)、模式二demo添加对okhttp3的支持,修复okhttp2中download误用成httpsClient添加对直接请求msg接口的异常提示添加IOutils.
toString的字符集参数修改成maven目录结构#69添加卡券相关事件消息优化xml解析#63TemplateData,JsonKitJSON序列化错误添加用户tag接口修复AccessToken超时并发问题,感谢@Lucare添加javadoc,详见:http://www.
dreamlu.
net/jfinal-weixin/apidocs/修复#44jacksonJSON特殊字符转换出错!
修复微信支付中w3cxml解析多生成一个#text参数添加微信Wap支付,H5版本非公众号内部支付修复微信支付verifyNotify的bug,建议直接升级1.
7JFinal升级到最新版2.
1改进Json,去除原有实现改用JFinalJackson实现添加微信摇一摇周边API添加高级群发API添加客服账号管理API添加okHttp增强http请求功能细化二维码、短链接、RedisAccessTokenCache等接口,使其简单方便使用减少依赖,去掉dom4j、commons-codec依赖,改用jdk自带修复永久素材下载InputStream提前close修复#31JsTicket的isAvailable判断问题修复UserApi中的batchGetUserInfo方法存在一个小bug修复GroupsApi类中delete方法变量引用错误修复pay.
jsp演示中回调js判断中的全角添加微信摇一摇事件来自@HGMrWang添加支付PaymentApi、PaymentKit下单、签名和WeixinPayController支付到支付通知简单的示例,谢谢@半杯联调+代码贡献添加素材管理MediaApi修正SnsAccessToken调用的问题,加上unionid支持,同时支持公众号和开放平台添加客服消息接口添加AccessTokenApi.
getAccessTokenStr()进一步缩减代码量AccessToken、js_ticket添加redis分布式cache实现不再强制依赖jackson,可选jackson或fastJson或gsonJFinalweixin1.
7ChangelogJFinalweixin1.
7ChangelogJFinalWeixin1.
6ChangelogJFinalWeixin1.
6ChangelogJFinalWeixin1.
5ChangelogJFinalWeixin1.
5Changelog版本更新记录35/117修正js_ticketAPI请求地址错误增加微信认证事件推送支持微信自定义菜单事件完善添加JS_sdk.
jsp方便微信js_sdk的签名,可使用test.
jsp测试添加数据统计接口DatacubeApi添加用户分组GroupsApi版本更新记录36/117com.
jfinal.
weixin.
iot.
api.
DeviceApi/***向设备推送消息*/publicApiResulttransMsg(StringdeviceType,StringdeviceID,StringopenID,Stringcontent);/***根据设备id获取二维码生成串*/publicApiResultcreateQrcode(ListdeviceIds);/***根据product_id获取设备id和二维码生成串*/publicApiResultcreateQrcodeNew(Stringproduct_id);/***绑定用户*/publicApiResultbind(Stringtikect,Stringdeviceid,Stringopenid);/***强制绑定*/publicApiResultcompelBind(Stringdeviceid,Stringopenid);/***解绑*/publicApiResultunbind(Stringtikect,Stringdeviceid,Stringopenid);/***批量授权/更新设备属性**授权后设备才能进行绑定操作**@paramdevices*设备属性列表*@paramisCreate*是否首次授权:true首次授权;false更新设备属性*/publicApiResultauthorize(Listdevices,booleanisCreate,StringproductId);/***设备状态查询**status0:未授权1:已经授权(尚未被用户绑定)2:已经被用户绑定*{"errcode":0,"errmsg":"ok","status":1,"status_info":"authorized"}*/publicApiResultgetStat(StringdeviceId);/***验证二维码获取二维码对应设备属性**@paramticket*二维码生成串*/publicApiResultverifyQrcode(Stringticket);智能硬件接口智能硬件接口APIjava类APIjava类接口接口智能硬件接口37/117/***根据设备类型和设备id查询绑定的openid*/publicApiResultgetOpenId(StringdeviceType,StringdeviceId);智能硬件接口38/117/***处理微信硬件绑定和解绑事件*@paramInEqubindEvent处理微信硬件绑定和解绑事件*/@OverrideprotectedvoidprocessInEqubindEvent(InEqubindEventmsg);/***处理微信硬件发来数据*@paramInEquDataMsg处理微信硬件发来数据*/@OverrideprotectedvoidprocessInEquDataMsg(InEquDataMsgmsg);智能硬件消息智能硬件消息智能硬件消息39/117Stringbegin_date="2015-11-06";Stringend_date="2015-11-06";//获取用户增减数据(getusersummary),最大时间跨度:7天DatacubeApi.
getUserCumulate(begin_date,end_date);//获取累计用户数据(getusercumulate),最大时间跨度:7天DatacubeApi.
getUserSummary(begin_date,end_date);/***获取图文群发每日数据,最大跨度1天*/DatacubeApi.
getArticleSummary(begin_date,end_date);/***获取图文群发总数据,最大跨度1天*/DatacubeApi.
getArticlEtotal(begin_date,end_date);/***获取图文统计数据,最大跨度3天*/DatacubeApi.
getUserRead(begin_date,end_date);/***获取图文统计分时数据,最大跨度1天*/DatacubeApi.
getUserReadHour(begin_date,end_date);/***获取图文分享转发数据,最大跨度7天*/DatacubeApi.
getUserShare(begin_date,end_date);/***获取图文分享转发分时数据,最大跨度1天*/DatacubeApi.
getUserShareHour(begin_date,end_date);/***获取消息发送概况数据,最大跨度7天*/DatacubeApi.
getUpStreamMsg(begin_date,end_date);/***获取消息分送分时数据,最大跨度1天*/DatacubeApi.
getUpStreamMsgHour(begin_date,end_date);/***获取消息发送周数据,最大跨度30天*/DatacubeApi.
getUpStreamMsgWeekMsg(begin_date,end_date);数据统计接口数据统计接口用户分析数据接口用户分析数据接口图文分析数据接口图文分析数据接口消息分析数据接口消息分析数据接口数据统计接口40/117/***获取消息发送月数据,最大跨度30天*/DatacubeApi.
getUpStreamMsgMonth(begin_date,end_date);/***获取消息发送分布数据,最大跨度15天*/DatacubeApi.
getUpStreamMsgDist(begin_date,end_date);/***获取消息发送分布周数据,最大跨度30天*/DatacubeApi.
getUpStreamMsgDistWeek(begin_date,end_date);/***获取消息发送分布月数据,最大跨度30天*/DatacubeApi.
getUpStreamMsgDistMonth(begin_date,end_date);/***获取接口分析数据,最大跨度30天*/DatacubeApi.
getInterFaceSummary(begin_date,end_date);/***获取接口分析分时数据,最大跨度1天*/DatacubeApi.
getInterFaceSummaryHour(begin_date,end_date);接口分析数据接口接口分析数据接口数据统计接口41/117https://pay.
weixin.
qq.
com/wiki/doc/api/wap.
phpchapter=15_3https://pay.
weixin.
qq.
com/wiki/doc/api/jsapi.
phpchapter=7_1https://pay.
weixin.
qq.
com/wiki/doc/api/app.
phpchapter=8_1https://pay.
weixin.
qq.
com/wiki/doc/api/native.
phpchapter=6_1微信支付相关文档微信支付相关文档Wap支付接口Wap支付接口公众号支付js-sdk公众号支付js-sdkApp支付App支付PC扫码支付PC扫码支付微信支付相关文档42/117微信支付可参考仓库中的WeixinPayController.
java1.
获取openId,采用SnsApi和SnsAccessTokenApi网页Oauth授权获取openid(未来会添加完整示例)2.
统一下单构造H5支付的jsonpackage信息,并返回到页面,当然这块可采用ajax.
(return_code和result_code都为SUCCESS的判断)3.
支付回调通知,js调起微信支付并完成支付后会post消息到统一下单的notify_url上,此处注意微信可能会多次post消息,注意避免重复更新订单!
/***根据商户订单号查询信息*@paramappid公众账号ID*@parammch_id商户号*@parampaternerKey商户密钥*@paramtransaction_id微信订单号*@returnMap回调信息*/publicstaticMapqueryByTransactionId(Stringappid,Stringmch_id,StringpaternerKey,Stringtransaction_id);/***根据商户订单号查询信息*@paramappid公众账号ID*@parammch_id商户号*@parampaternerKey商户密钥*@paramout_trade_no商户订单号*@returnMap回调信息*/publicstaticMapqueryByOutTradeNo(Stringappid,Stringmch_id,StringpaternerKey,Stringout_trade_no);/***关闭订单*@paramappid公众账号ID*@parammch_id商户号*@parampaternerKey商户密钥*@paramout_trade_no商户订单号*@returnMap回调信息*/publicstaticMapcloseOrder(Stringappid,Stringmch_id,StringpaternerKey,Stringout_trade_no);/***申请退款,内部添加了随机字符串nonce_str和签名sign*@paramparams参数map,内部添加了随机字符串nonce_str和签名sign*@parampaternerKey商户密钥*@paramcertPath证书文件目录*@returnMapmap*@throwsException*/publicstaticMaprefund(Mapparams,StringpaternerKey,StringcertPath);示例:微信v3公众号支付-网页端调起支付API微信v3公众号支付-网页端调起支付API支付过程支付过程其他API其他API查询订单查询订单关闭订单关闭订单申请退款申请退款微信v3公众号支付-网页端调起支付API43/117//公众账号IDappid是String(32)wx8888888888888888微信分配的公众账号ID(企业号corpid即为此appId)//商户号mch_id是String(32)1900000109微信支付分配的商户号//设备号device_info否String(32)013467007045764终端设备号//微信订单号transaction_id二选一String(28)1217752501201407033233368018微信生成的订单号,在支付通知中有返回//商户订单号out_trade_noString(32)1217752501201407033233368018商户侧传给微信的订单号//商户退款单号out_refund_no是String(32)1217752501201407033233368018商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔//总金额total_fee是Int100订单总金额,单位为分,只能为整数,详见支付金额//退款金额refund_fee是Int100退款总金额,订单总金额,单位为分,只能为整数,详见支付金额//货币种类refund_fee_type否String(8)CNY货币类型,符合ISO4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型//操作员op_user_id是String(32)1900000109操作员帐号,默认为商户号Mapparams=newHashMap();params.
put("appid",appid);params.
put("mch_id",partner);params.
put("out_trade_no","US2015111300044");params.
put("out_refund_no",System.
currentTimeMillis(params.
put("total_fee","1");params.
put("refund_fee","1");params.
put("op_user_id",partner);StringcertPath="/Users/lcm/Desktop/apiclient_cert.
p12";//申请退款,内部添加了随机字符串nonce_str和签名signMapmap1=PaymentApi.
refund(params,paternerKey,certPath);System.
out.
println(map1);/***根据微信订单号查询退款*@paramappid公众账号ID*@parammch_id商户号*@parampaternerKey商户密钥*@paramtransaction_id微信订单号*@returnMapmap*/publicstaticMaprefundQueryByTransactionId(Stringappid,Stringmch_id,StringpaternerKey,Stringtransaction_id);/***根据微信订单号查询退款*@paramappid公众账号ID*@parammch_id商户号*@parampaternerKey商户密钥*@paramout_trade_no商户订单号*@returnMapmap*/publicstaticMaprefundQueryByOutTradeNo(Stringappid,Stringmch_id,StringpaternerKey,Stringout_trade_no);/***根据微信订单号查询退款*@paramappid公众账号ID*@parammch_id商户号*@parampaternerKey商户密钥*@paramout_refund_no商户退款单号*@returnMapmap*/publicstaticMaprefundQueryByOutRefundNo(Stringappid,Stringmch_id,StringpaternerKey,Stringout_refund_no)/***根据微信订单号查询退款*@paramappid公众账号ID*@parammch_id商户号*@parampaternerKey商户密钥*@paramrefund_id微信退款单号*@returnMapmap*/publicstaticMaprefundQueryByRefundId(Stringappid,Stringmch_id,StringpaternerKey,Stringrefund_id);退款查询退款查询微信v3公众号支付-网页端调起支付API44/117微信买单http://www.
jianshu.
com/p/e28eb52830c5现金红包http://www.
jianshu.
com/p/c06120bc1f5c刷卡支付http://www.
jianshu.
com/p/ef6c9c5c5807扫码支付http://www.
jianshu.
com/p/474af73eb176公众号支付http://www.
jianshu.
com/p/cb2456a2d7a7Android版-微信APP支付http://www.
jianshu.
com/p/febf7c2eea82Android版-支付宝App支付http://www.
jianshu.
com/p/3d91248aea4b支付宝Wap支付http://www.
jianshu.
com/p/7656de831a2c网页端调起支付API:https://pay.
weixin.
qq.
com/wiki/doc/api/jsapi.
phpchapter=7_7&index=6#统一下单:https://pay.
weixin.
qq.
com/wiki/doc/api/jsapi.
phpchapter=9_1支付结果通用通知:https://pay.
weixin.
qq.
com/wiki/doc/api/jsapi.
phpchapter=9_7查询订单:https://pay.
weixin.
qq.
com/wiki/doc/api/jsapi.
phpchapter=9_2关闭订单:https://pay.
weixin.
qq.
com/wiki/doc/api/jsapi.
phpchapter=9_3申请退款:https://pay.
weixin.
qq.
com/wiki/doc/api/jsapi.
phpchapter=9_4查询退款:https://pay.
weixin.
qq.
com/wiki/doc/api/jsapi.
phpchapter=9_5微信支付使用总结微信支付使用总结支付宝支付宝官方文档官方文档微信v3公众号支付-网页端调起支付API45/117/***创建二维码,需要自己拼接临时二维码和永久二维码请求的json字符串*/publicstaticApiResultcreate(StringjsonStr);/***创建临时二维码*@paramexpireSeconds该二维码有效时间,以秒为单位.
最大不超过604800(即7天).
*@paramsceneId场景值ID,临时二维码时为32位非0整型*@returnApiResult二维码信息*/publicstaticApiResultcreateTemporary(intexpireSeconds,intsceneId);/***创建永久二维码*@paramsceneId场景值ID,永久二维码时最大值为100000(目前参数只支持1--100000)*@returnApiResult二维码信息*/publicstaticApiResultcreatePermanent(intsceneId);/***创建永久二维码*@paramsceneStr场景值ID(字符串形式的ID),字符串类型,长度限制为1到64,仅永久二维码支持此字段*@returnApiResult二维码信息*/publicstaticApiResultcreatePermanent(StringsceneStr);/***通过ticket换取二维码地址*@paramticket换取二维码参数*@returnStringurl*/publicstaticStringgetShowQrcodeUrl(Stringticket);/***1.
5版本,需要自己拼接json串*/publicstaticApiResultgetShorturl(StringjsonStr);/***长链接转短链接接口*@paramlongUrl需要转换的长链接,支持http://、https://、weixin://wxpay格式的url*@returnApiResult短连接信息*/帐号管理帐号管理生成带参数的二维码生成带参数的二维码QrcodeApiJFinal-weixin1.
5版本JFinal-weixin1.
5版本JFinal-weixin1.
6开始JFinal-weixin1.
6开始拼接二维码连接,可直接通过拼接二维码连接,可直接通过显示显示长链接转短链接接口长链接转短链接接口ShorturlApiJFinal-weixin1.
5版本JFinal-weixin1.
5版本1.
6版本开始支持1.
6版本开始支持帐号管理46/117publicstaticApiResultgetShortUrl(StringlongUrl);*注意:部分简化Api为1.
6版本添加帐号管理47/117//js登录时获取的codewxaUserApi.
getSessionKey(StringjsCode);http://git.
oschina.
net/jfinal/jfinal-weixin/blob/master/src/main/webapp/wxaapp/app.
jshttp://git.
oschina.
net/jfinal/jfinal-weixin/blob/master/src/main/java/com/jfinal/weixin/demo/WxaUserApiController.
java小程序登陆接口小程序登陆接口api接口api接口参考示例参考示例js端js端控制器端控制器端小程序登陆接口48/117/***获取小程序页面二维码**通过该接口,仅能生成已发布的小程序的二维码.
*可以在开发者工具预览时生成开发版的带参二维码.
*带参二维码只有100000个,请谨慎调用.
**width默认430*@parampath不能为空,最大长度128字节*/wxaQrcodeApi.
createQrcode(Stringpath);/***获取小程序页面二维码**通过该接口,仅能生成已发布的小程序的二维码.
*可以在开发者工具预览时生成开发版的带参二维码.
*带参二维码只有100000个,请谨慎调用.
**@parampath不能为空,最大长度128字节*@paramwidth默认430二维码的宽度*/wxaQrcodeApi.
createQrcode(Stringpath,intwidth);小程序页面二维码小程序页面二维码小程序页面二维码49/117/***获取临时素材*@parammediaId素材Id*@returnMediaFile*/wxaMaterialApi.
getMedia(StringmediaId);/***上传临时素材*@paramfile需要上传的文件*@paramtypeimage*@returnApiResult*/wxaMaterialApi.
uploadMedia(Filefile,Stringtype);小程序素材接口小程序素材接口小程序素材接口50/117需要继承WxaMsgController,实现消息接口.
/***处理接收到的文本消息*@paramtextMsg处理接收到的文本消息*/protectedvoidprocessTextMsg(WxaTextMsgtextMsg);/***处理接收到的图片消息*@paramimageMsg处理接收到的图片消息*/protectedvoidprocessImageMsg(WxaImageMsgimageMsg);/***处理接收到的进入会话事件*@paramuserEnterSessionMsg处理接收到的进入会话事件*/protectedvoidprocessUserEnterSessionMsg(WxaUserEnterSessionMsguserEnterSessionMsg);小程序消息处理小程序消息处理小程序消息处理51/117一次性订阅消息接口/***/Stringstring=SubscribeMsgApi.
getAuthorizeURL(Stringscene,Stringtemplate_id,StringredirectUri,Stringreserved);/**发送一次性订阅消息@paramjsonStrjson字符串@returnApiResult发送json数据示例:{"touser":"OPENID","template_id":"TEMPLATE_ID","url":"URL","scene":"SCENE","title":"TITLE","data":{"content":{"value":"VALUE","color":"COLOR"}}}*/ApiResultapiResult=SubscribeMsgApi.
subscribe(StringjsonStr);/***/ApiResultapiResult=SubscribeMsgApi.
subscribe(SubscribeInfosubscribeInfo);/***/ApiResultapiResult=SubscribeMsgApi.
subscribe(StringopenId,StringtemplateId,Stringurl,intscene,Stringtitle,Stringvalue,Stringcolor);SubscribeMsgApiSubscribeMsgApiSubscribeMsgApiSubscribeMsgApiSubscribeMsgApi52/117/***小程序统一下单*@paramorder小程序支付订单信息封装*@throwsPaymentException支付异常*/wxaPayApi.
unifiedOrder(WxaOrderorder);小程序支付接口小程序支付接口小程序支付接口53/117获取用户基本信息(UnionID机制)http://mp.
weixin.
qq.
com/wiki/1/8a5ce6257f1d3b2afb20f83e72b72ce9.
html/**获取用户个人信@paramaccessToken调用凭证access_token@paramopenId普通用户的标识,对当前开发者帐号唯一@returnApiResult*/ApiResultapiResult=SnsApi.
getUserInfo(StringaccessToken,StringopenId);SnsApiSnsApiSnsApiSnsApiSnsApi54/117publicclassWeixinConfigextendsJFinalConfig{publicvoidconfigConstant(Constantsme){PropKit.
use("a_little_config.
txt");me.
setDevMode(PropKit.
getBoolean("devMode",false));//ApiConfigKit设为开发模式可以在开发阶段输出请求交互的xml与json数据ApiConfigKit.
setDevMode(me.
getDevMode());//默认使用的jackson,下面示例是切换到fastJson//me.
setJsonFactory(newFastJsonFactory());}publicvoidconfigRoute(Routesme){//jfinal3.
6开始,如果有继承MsgController的类,则需要开启下面的配置,将超类中的index()映射为actionme.
setMappingSuperClass(true);me.
add("/msg",WeixinMsgController.
class);me.
add("/api",WeixinApiController.
class,"/api");me.
add("/pay",WeixinPayController.
class);}publicvoidconfigPlugin(Pluginsme){//1.
5之后支持redis存储access_token、js_ticket,需要先启动RedisPlugin//RedisPluginredisPlugin=newRedisPlugin("weixin","127.
0.
0.
1");//me.
add(redisPlugin);}publicvoidafterJFinalStart(){//1.
5之后支持redis存储access_token、js_ticket,需要先启动RedisPlugin//ApiConfigKit.
setAccessTokenCache(newRedisAccessTokenCache());//1.
6新增的2种初始化//ApiConfigKit.
setAccessTokenCache(newRedisAccessTokenCache(Redis.
use("weixin")));//ApiConfigKit.
setAccessTokenCache(newRedisAccessTokenCache("weixin"));ApiConfigac=newApiConfig();//配置微信API相关参数ac.
setToken(PropKit.
get("token"));ac.
setAppId(PropKit.
get("appId"));ac.
setAppSecret(PropKit.
get("appSecret"));/***是否对消息进行加密,对应于微信平台的消息加解密方式:*1:true进行加密且必须配置encodingAesKey*2:false采用明文模式,同时也支持混合模式*/ac.
setEncryptMessage(PropKit.
getBoolean("encryptMessage",false));ac.
setEncodingAesKey(PropKit.
get("encodingAesKey","settingitinconfigfile"));/***多个公众号时,重复调用ApiConfigKit.
putApiConfig(ac)依次添加即可,第一个添加的是默认.
*/ApiConfigKit.
putApiConfig(ac);/***1.
9新增LocalTestTokenCache用于本地和线上同时使用一套appId时避免本地将线上AccessToken冲掉**设计初衷:https://www.
oschina.
net/question/2702126_2237352**注意:*1.
上线时应保证此处isLocalDev为false,或者注释掉该不分代码!
**2.
为了安全起见,此处可以自己添加密钥之类的参数,例如:*http://localhost/weixin/api/getTokensecret=xxxx*然后在WeixinApiController#getToken()方法中判断secret**@seeWeixinApiController#getToken()*///if(isLocalDev){JFinal-weixin中的WeixinConfig配置JFinal-weixin中的WeixinConfig配置JFinal-weixin中的WeixinConfig配置55/117//StringonLineTokenUrl="http://localhost/weixin/api/getToken";//ApiConfigKit.
setAccessTokenCache(newLocalTestTokenCache(onLineTokenUrl));//}WxaConfigwc=newWxaConfig();wc.
setAppId("wx4f53594f9a6b3dcb");wc.
setAppSecret("eec6482ba3804df05bd10895bace0579");WxaConfigKit.
setWxaConfig(wc);}publicvoidconfigInterceptor(Interceptorsme){}publicvoidconfigHandler(Handlersme){}publicvoidconfigEngine(Engineengine){}}以上通过configRoute方法配置了访问路由"/msg"与"/api".
项目启动后,在微信服以务器上配置url:http://域名/msgJFinal-weixin中的WeixinConfig配置56/117网页授权获取access_tokenAPI/**生成Authorize链接@paramappId应用id@paramredirect_uri回跳地址@paramsnsapiBasesnsapi_base(不弹出授权页面,只能拿到用户openid)snsapi_userinfo(弹出授权页面,这个可以通过openid拿到昵称、性别、所在地)@returnurl*/Stringstring=SnsAccessTokenApi.
getAuthorizeURL(StringappId,Stringredirect_uri,booleansnsapiBase);/**生成Authorize链接@paramappId应用id@paramredirectUri回跳地址@paramstate重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节@paramsnsapiBasesnsapi_base(不弹出授权页面,只能拿到用户openid)snsapi_userinfo(弹出授权页面,这个可以通过openid拿到昵称、性别、所在地)@returnurl*/Stringstring=SnsAccessTokenApi.
getAuthorizeURL(StringappId,StringredirectUri,Stringstate,booleansnsapiBase);/**生成网页二维码授权链接@paramappId应用id@paramredirect_uri回跳地址@returnurl*/Stringstring=SnsAccessTokenApi.
getQrConnectURL(StringappId,Stringredirect_uri);/**生成网页二维码授权链接@paramappId应用id@paramredirect_uri回跳地址@paramstate重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节@returnurl*/Stringstring=SnsAccessTokenApi.
getQrConnectURL(StringappId,Stringredirect_uri,Stringstate);/**通过code获取access_token@paramcode第一步获取的code参数@paramappId应用唯一标识@paramsecret应用密钥AppSecret@returnSnsAccessToken*/SnsAccessTokensnsAccessToken=SnsAccessTokenApi.
getSnsAccessToken(StringappId,Stringsecret,Stringcode);SnsAccessTokenApiSnsAccessTokenApiSnsAccessTokenApiSnsAccessTokenApiSnsAccessTokenApi57/117企业号推荐@javen205同学基于JFinal-weixin的改造版本:http://git.
oschina.
net/javen205/jfinal_qyweixinJFinal微信企业号JFinal微信企业号JFinal微信企业号58/117核销卡券接口/**查询Code接口@paramcode单张卡券的唯一标准.
@paramcardId卡券ID代表一类卡券.
自定义code卡券必填.
@paramcheckConsume是否校验code核销状态,填入true和false时的code异常状态返回数据不同.
@return{ApiResult}*/ApiResultapiResult=CardCodeApi.
get(Stringcode,StringcardId,booleancheckConsume);/**核销Code接口@paramcode需核销的Code码.
@return{ApiResult}*/ApiResultapiResult=CardCodeApi.
consume(Stringcode);/**核销Code接口@paramcode需核销的Code码.
@paramcardIdcard_id卡券ID.
创建卡券时use_custom_code填写true时必填.
非自定义Code不必填写.
@return{ApiResult}*/ApiResultapiResult=CardCodeApi.
consume(Stringcode,StringcardId);/**线上核销Code接口@paramcode需核销的Code码.
@paramopenid是string(20)当前卡券使用者的openid,通常通过网页授权登录或自定义url跳转参数获得.
@return{ApiResult}*/ApiResultapiResult=CardCodeApi.
consumeOnline(Stringcode,Stringopenid);/**Code解码接口@paramencryptCode经过加密的Code码.
@return{ApiResult}*/ApiResultapiResult=CardCodeApi.
decrypt(StringencryptCode);/**导入code接口,文档有歧义buffer是文件的数据流@paramcardId需要进行导入code的卡券ID.
@paramcodeList需要进行导入code的卡券ID.
@return{ApiResult}*/ApiResultapiResult=CardCodeApi.
setDeposit(StringcardId,java.
util.
ListcodeList);/**查询导入code数目接口@paramcardId需要进行导入code的卡券ID.
@return{ApiResult}CardCodeApiCardCodeApiCardCodeApiCardCodeApiCardCodeApi59/117*/ApiResultapiResult=CardCodeApi.
getDepositCount(StringcardId);/**核查code接口@paramcardId需要进行导入code的卡券ID.
@paramcodeList已经微信卡券后台的自定义code,上限为100个.
@return{ApiResult}*/ApiResultapiResult=CardCodeApi.
checkCode(StringcardId,java.
util.
ListcodeList);/**更改Code接口@paramcode需变更的Code码.
@paramnewCode变更后的有效Code码.
@return{ApiResult}*/ApiResultapiResult=CardCodeApi.
update(Stringcode,StringnewCode);/**更改Code接口@paramcardId卡券ID.
自定义Code码卡券为必填.
@paramcode需变更的Code码.
@paramnewCode变更后的有效Code码.
@return{ApiResult}*/ApiResultapiResult=CardCodeApi.
update(StringcardId,Stringcode,StringnewCode);/**朋友的券-Mark(占用)Code接口@paramcode是卡券的code码.
@paramcardId需要进行导入code的卡券ID.
@paramopenid是用券用户的openid.
@paramisMark是是否要mark(占用)这个code,填写true或者false,表示占用或解除占用.
@return{ApiResult}*/ApiResultapiResult=CardCodeApi.
markCode(Stringcode,StringcardId,Stringopenid,booleanisMark);CardCodeApi60/117JFinal-weixin-2.
3已经放出,下面列举下Jar包依赖关系!
注意:JFinal-weixin-1.
6存在一个微信支付时的bug,建议直接使用最新稳定版.
说明:----表示--jar包的依赖,1.
8以下版本的用户建议大家直接升级.
--jfinal-2.
2.
jar//1.
8和以上版本已经不再依赖freemarker--freemarker-2.
3.
20.
jar注意:不用额外配置放入jar包即可--fastjson-1.
2.
6.
jar//或者--jackson-databind-2.
4.
3.
jar----jackson-annotations-2.
4.
0.
jar----jackson-core-2.
4.
3.
jar--jedis-2.
7.
2.
jar--commons-pool2-2.
3.
jar--fst-2.
29.
jar//序列化所用----jackson-core-2.
4.
3.
jar----javassist-3.
19.
0-GA.
jar----objenesis-2.
1.
jar注意:不用额外配置放入jar包即可--okhttp-2.
7.
5.
jar----okio-1.
6.
0.
jarJFinal-weixin-1.
8添加对okHttp3的支持--okhttp-3.
2.
0.
jar----okio-1.
6.
0.
jarJar包合集下载地址:JFinal-weixinjar包依赖.
zip注意:okhttp2默认使用的为Jdk1.
7编译,jdk1.
6的同学请前往下载:https://github.
com/qiniu/java-sdk/tree/master/libscom.
jfinaljfinal-weixin2.
3JFinalweixin1.
6Jar依赖JFinalweixin1.
6Jar依赖必须依赖的包,项目中已有的请略过必须依赖的包,项目中已有的请略过可选Json处理包,必选其一,项目中已有的请略过可选Json处理包,必选其一,项目中已有的请略过可选包(非必须):redis分布式存储accessToken,项目中已有的请略过可选包(非必须):redis分布式存储accessToken,项目中已有的请略过可选增强包可选增强包okHttp,JFinal-weixin-1.
6开始支持,JFinal-weixin-1.
6开始支持maven依赖maven依赖必须的依赖必须的依赖JFinalweixin1.
6Jar依赖61/117jackson或fastjson两者者必选其一,配置如上com.
fasterxml.
jackson.
corejackson-databind2.
4.
3或者com.
alibabafastjson1.
2.
6com.
squareup.
okhttpokhttp2.
7.
5JFinal-weixin-1.
8添加对okHttp3的支持com.
squareup.
okhttp3okhttp3.
2.
0可选依赖可选依赖okHttp增强,1.
6支持okHttp增强,1.
6支持JFinalweixin1.
6Jar依赖62/1171.
jfinal-weixin-demo:https://gitee.
com/jfinal/jfinal-weixin/tree/master/src/main/java/com/jfinal/weixin/demo2.
微信官方web开发者工具:http://mp.
weixin.
qq.
com/wiki/10/e5f772f4521da17fa0d7304f68b97d7e.
html3.
荐QQ浏览器之微信调试工具:http://blog.
qqbrowser.
cc4.
微信公众号开发实时调试方法:http://my.
oschina.
net/jfinal/blog/3368615.
微信开发本地调试工具(模拟微信客户端):http://soft.
dreamlu.
net/微信开发调试功能.
rar6.
@灵溪小鱼推荐微信本地调试方法,用ngrok服务.
可用国人搭建的ngrok服务:http://natapp.
cn/#downloadJFinalweixindemo和调试JFinalweixindemo和调试JFinalweixindemo和调试63/117注意:版本更新记录vsJFinalweixinJar依赖微信企业号SDK:http://git.
oschina.
net/javen205/jfinal_qyweixinJFinal-weixin1.
8以下版本升级到1.
9:https://catch.
edaoe.
com/1183.
html1.
JFinal-weixinJar包依赖2.
消息的加解密接口JCE无限制权限策略InvalidKeyException:Illegalkeysize3.
JFinal-weixin中的WeixinConfig配置4.
JFinal-weixin-demo和调试5.
多公众号支持6.
获取接口调用凭据7.
用户管理8.
自定义菜单9.
帐号管理10.
发送消息11.
数据统计接口12.
微信支付相关文档13.
微信v3公众号支付网页端调起支付API14.
使用JS_SDK.
jsp更加方便的开发微信JSSDK接口15.
jssdk怎么支持多公众号16.
在springMVC,struts项目中整合JFinalweixin17.
OAuth-code授权异常处理1.
公众号消息处理2.
小程序消息处理1.
AccessTokenApi认证并获取Access_token2.
JsTicketApi微信卡券接口签名凭证3.
MediaApi素材管理4.
MenuApimenu接口5.
QrcodeApi生成带参数的二维码6.
SemanticApi语义接口7.
ShorturlApi长短链接接口8.
PoiApi微信门店接口HomeHome公众号文档公众号文档被动消息处理接口被动消息处理接口JFinal-weixinApi接口JFinal-weixinApi接口公众号接口公众号接口Home64/1179.
AutoReplyInfoApi获取自动回复规则10.
CallbackIpApi获取微信服务器IP地址11.
DatacubeApi数据统计接口1.
PaymentApi微信支付api2.
RedPackApi微信红包api1.
UserApi用户管理接口2.
SnsAccessTokenApi网页授权获取Access_token接口3.
SnsApi获取用户基本信息(UnionID机制)4.
TagApi用户标签接口5.
GroupsApi分组Api6.
BlackUserApi黑名单管理api接口有问题1.
CustomServiceApi多客服功能2.
TemplateMsgApi模板消息接口3.
MessageApi高级群发相关接口4.
SubscribeMsgApi一次性消息订阅接口1.
ShakeAroundAccountApi申请开通摇一摇周边2.
ShakeAroundDeviceApi周边-设备管理3.
ShakeAroundMaterialApi周边上传图片素材4.
ShakeAroundPageApi周边页面接口5.
ShakeAroundStatisticsApi周边数据统计接口6.
ShakeAroundUserApi摇周边的设备及用户信息接口1.
CardApi卡券相关接口2.
CardCodeApi核销卡券接口3.
CardExtApi特殊卡券接口-特殊票券4.
CardPayApi付费券点5.
MemberCardApi会员卡接口1.
DeviceApi设备相关接口2.
智能硬件消息公众号支付相关接口公众号支付相关接口公众号用户相关接口公众号用户相关接口公众号客服vs消息接口公众号客服vs消息接口公众号摇周边接口公众号摇周边接口公众号卡券相关公众号卡券相关微信硬件微信硬件小程序接口小程序接口Home65/1171.
WxaAccessTokenApi小程序access_token2.
WxaMaterialApi小程序材料接口3.
WxaMessageApi小程序客服接口-发消息4.
WxaPayApi小程序支付接口5.
WxaQrcodeApi小程序二维码接口6.
WxaTemplateApi小程序模版消息7.
WxaUserApi小程序用户接口Home66/117//template模版对象wxaTemplateApi.
send(WxaTemplatetemplate);小程序模版消息小程序模版消息api接口api接口小程序模版消息67/117分组Api/**创建分组,一个公众账号,最多支持创建100个分组.
@paramname分组名@returnApiResult*/ApiResultapiResult=GroupsApi.
create(Stringname);/**查询所有分组@returnApiResult*/ApiResultapiResult=GroupsApi.
get();/**通过用户的OpenID查询其所在的GroupID@paramopenid普通用户的标识,对当前开发者帐号唯一@returnApiResult*/ApiResultapiResult=GroupsApi.
getId(Stringopenid);/**修改分组名@paramid分组id,由微信分配@paramname分组名字(30个字符以内)@returnApiResult*/ApiResultapiResult=GroupsApi.
update(intid,Stringname);/**移动用户分组@paramopenid用户唯一标识符@paramto_groupid分组id@returnApiResult*/ApiResultapiResult=GroupsApi.
membersUpdate(Stringopenid,intto_groupid);/**批量移动用户分组@paramopenidList用户唯一标识符openid的列表(size不能超过50)@paramto_groupid分组id@returnApiResult*/ApiResultapiResult=GroupsApi.
membersBatchUpdate(java.
util.
ListopenidList,intto_groupid);/**删除分组@paramid分组的id@returnApiResult*/ApiResultapiResult=GroupsApi.
delete(intid);GroupsApiGroupsApiGroupsApiGroupsApiGroupsApi68/117设备相关APIhttp://iot.
weixin.
qq.
com/wiki/new/index.
htmlpage=3-4-3下的API为设备相关API,测试号可以调用,正式服务号需要申请权限后才能调用.
/**向设备推送消息@paramdeviceType设备类型,目前为"公众账号原始ID"@paramdeviceID设备ID@paramopenID微信用户账号的openid@paramcontent消息内容,BASE64编码@return{ApiResult}*/DeviceApideviceApi=Duang.
duang(DeviceApi.
class);ApiResultapiResult=deviceApi.
transMsg(StringdeviceType,StringdeviceID,StringopenID,Stringcontent);/**根据设备id获取二维码生成串@paramdeviceIds设备id集合@return{ApiResult}*/DeviceApideviceApi=Duang.
duang(DeviceApi.
class);ApiResultapiResult=deviceApi.
createQrcode(java.
util.
ListdeviceIds);/**根据product_id获取设备id和二维码生成串@paramproductId产品Id@return{ApiResult}*/DeviceApideviceApi=Duang.
duang(DeviceApi.
class);ApiResultapiResult=deviceApi.
createQrcodeNew(StringproductId);/**绑定@paramtikect二维码生成串@paramdeviceid设备id@paramopenid微信用户账号的openid@return{ApiResult}*/DeviceApideviceApi=Duang.
duang(DeviceApi.
class);ApiResultapiResult=deviceApi.
bind(Stringtikect,Stringdeviceid,Stringopenid);/**强制绑定@paramdeviceid设备id@paramopenid微信用户账号的openid@return{ApiResult}*/DeviceApideviceApi=Duang.
duang(DeviceApi.
class);ApiResultapiResult=deviceApi.
compelBind(Stringdeviceid,Stringopenid);/**解绑@paramtikect二维码生成串DeviceApiDeviceApiDeviceApiDeviceApiDeviceApi69/117@paramdeviceid设备id@paramopenid微信用户账号的openid@return{ApiResult}*/DeviceApideviceApi=Duang.
duang(DeviceApi.
class);ApiResultapiResult=deviceApi.
unbind(Stringtikect,Stringdeviceid,Stringopenid);/**批量授权/更新设备属性授权后设备才能进行绑定操作@paramdevices设备属性列表@paramisCreate是否首次授权:true首次授权;false更新设备属性@paramproductId商品id@return{ApiResult}*/DeviceApideviceApi=Duang.
duang(DeviceApi.
class);ApiResultapiResult=deviceApi.
authorize(java.
util.
Listdevices,booleanisCreate,StringproductId);/**设备状态查询@paramdeviceId设备Idstatus0:未授权1:已经授权(尚未被用户绑定)2:已经被用户绑定{"errcode":0,"errmsg":"ok","status":1,"status_info":"authorized"}@return{ApiResult}*/DeviceApideviceApi=Duang.
duang(DeviceApi.
class);ApiResultapiResult=deviceApi.
getStat(StringdeviceId);/**验证二维码获取二维码对应设备属性@paramticket二维码生成串@return{ApiResult}*/DeviceApideviceApi=Duang.
duang(DeviceApi.
class);ApiResultapiResult=deviceApi.
verifyQrcode(Stringticket);/**根据设备类型和设备id查询绑定的openid@paramdeviceType设备类型,目前为"公众账号原始ID"@paramdeviceId设备ID@return{ApiResult}*/DeviceApideviceApi=Duang.
duang(DeviceApi.
class);ApiResultapiResult=deviceApi.
getOpenId(StringdeviceType,StringdeviceId);DeviceApi70/117数据统计接口/**用户分析数据接口,最大时间跨度:7天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUserSummary(Stringbegin_date,Stringend_date);/**用户分析数据接口,最大时间跨度:7天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUserCumulate(Stringbegin_date,Stringend_date);/**获取图文群发每日数据,最大跨度1天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getArticleSummary(Stringbegin_date,Stringend_date);/**获取图文群发总数据,最大跨度1天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getArticlEtotal(Stringbegin_date,Stringend_date);/**获取图文统计数据,最大跨度3天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUserRead(Stringbegin_date,Stringend_date);/**获取图文统计分时数据,最大跨度1天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUserReadHour(Stringbegin_date,Stringend_date);/**获取图文分享转发数据,最大跨度7天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResultDatacubeApiDatacubeApiDatacubeApiDatacubeApiDatacubeApi71/117*/ApiResultapiResult=DatacubeApi.
getUserShare(Stringbegin_date,Stringend_date);/**获取图文分享转发分时数据,最大跨度1天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUserShareHour(Stringbegin_date,Stringend_date);/**获取消息发送概况数据,最大跨度7天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUpStreamMsg(Stringbegin_date,Stringend_date);/**获取消息分送分时数据,最大跨度1天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUpStreamMsgHour(Stringbegin_date,Stringend_date);/**获取消息发送周数据,最大跨度30天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUpStreamMsgWeekMsg(Stringbegin_date,Stringend_date);/**获取消息发送月数据,最大跨度30天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUpStreamMsgMonth(Stringbegin_date,Stringend_date);/**获取消息发送分布数据,最大跨度15天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUpStreamMsgDist(Stringbegin_date,Stringend_date);/**获取消息发送分布周数据,最大跨度30天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUpStreamMsgDistWeek(Stringbegin_date,Stringend_date);/**DatacubeApi72/117获取消息发送分布月数据,最大跨度30天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getUpStreamMsgDistMonth(Stringbegin_date,Stringend_date);/**获取接口分析数据,最大跨度30天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getInterFaceSummary(Stringbegin_date,Stringend_date);/**获取接口分析分时数据,最大跨度1天@parambegin_date获取数据的起始日期@paramend_date获取数据的结束日期@returnApiResult*/ApiResultapiResult=DatacubeApi.
getInterFaceSummaryHour(Stringbegin_date,Stringend_date);/**拉取卡券概况数据接口@parambeginDate获取数据的起始日期@paramendDate获取数据的结束日期@paramcondSource卡券来源,0为公众平台创建的卡券数据、1是API创建的卡券数据@returnApiResult*/ApiResultapiResult=DatacubeApi.
getCardBizuinInfo(StringbeginDate,StringendDate,intcondSource);/**获取免费券数据接口@parambeginDate获取数据的起始日期@paramendDate获取数据的结束日期@paramcondSource卡券来源,0为公众平台创建的卡券数据、1是API创建的卡券数据@returnApiResult*/ApiResultapiResult=DatacubeApi.
getCardInfo(StringbeginDate,StringendDate,intcondSource);/**获取免费券数据接口@parambeginDate获取数据的起始日期@paramendDate获取数据的结束日期@paramcondSource卡券来源,0为公众平台创建的卡券数据、1是API创建的卡券数据@paramcardId卡券ID.
填写后,指定拉出该卡券的相关数据.
@returnApiResult*/ApiResultapiResult=DatacubeApi.
getCardInfo(StringbeginDate,StringendDate,intcondSource,StringcardId);/**拉取会员卡概况数据接口@parambeginDate获取数据的起始日期@paramendDate获取数据的结束日期@paramcondSource卡券来源,0为公众平台创建的卡券数据、1是API创建的卡券数据@returnApiResult*/ApiResultapiResult=DatacubeApi.
getMemberCardInfo(StringbeginDate,StringendDate,intcondSource);/**DatacubeApi73/117拉取单张会员卡数据接口@parambeginDate获取数据的起始日期@paramendDate获取数据的结束日期@paramcardId"card_id":"xxxxxxxxxxxxxxxx"卡券id@returnApiResult*/ApiResultapiResult=DatacubeApi.
getMemberCardDetail(StringbeginDate,StringendDate,StringcardId);DatacubeApi74/117多客服功能仅支持获取客服聊天记录接口,其他功能可以使用微信官方的多客服客户端软件来完成.
客服接口:http://mp.
weixin.
qq.
com/wiki/1/70a29afed17f56d537c833f89be979c9.
html/**获取客服聊天记录@paramjsonStrjson字符串@return{ApiResult}*/ApiResultapiResult=CustomServiceApi.
getRecord(StringjsonStr);/**获取客服聊天记录@parampageindex查询第几页,从1开始@parampagesize每页大小,每页最多拉取50条@paramstarttime查询开始时间,UNIX时间戳@paramendtime查询结束时间,UNIX时间戳,每次查询不能跨日查询@returnApiResult*/ApiResultapiResult=CustomServiceApi.
getRecord(intpageindex,intpagesize,longstarttime,longendtime);/**添加客服帐号@paramkf_account完整客服账号,格式为:账号前缀@公众号微信号@paramnickname客服昵称,最长6个汉字或12个英文字符@parampassword客服账号登录密码,格式为密码明文的32位加密MD5值.
该密码仅用于在公众平台官网的多客服功能中使用,若不使用多客服功能,则不必设置密码@returnApiResult*/ApiResultapiResult=CustomServiceApi.
addKfAccount(Stringkf_account,Stringnickname,Stringpassword);/**修改客服帐号@paramkf_account完整客服账号,格式为:账号前缀@公众号微信号@paramnickname客服昵称,最长6个汉字或12个英文字符@parampassword客服账号登录密码,格式为密码明文的32位加密MD5值.
该密码仅用于在公众平台官网的多客服功能中使用,若不使用多客服功能,则不必设置密码@returnApiResult*/ApiResultapiResult=CustomServiceApi.
updateKfAccount(Stringkf_account,Stringnickname,Stringpassword);/**删除客服帐号@paramkf_account完整客服账号,格式为:账号前缀@公众号微信号@returnApiResult*/ApiResultapiResult=CustomServiceApi.
delKfAccount(Stringkf_account);/**设置客服帐号的头像@paramkf_account完整客服账号,格式为:账号前缀@公众号微信号@paramheadImg客服人员的头像,头像图片文件必须是jpg格式,推荐使用640*640大小的图片以达到最佳效果@returnApiResult*/ApiResultapiResult=CustomServiceApi.
uploadKfAccountHeadImg(Stringkf_account,FileheadImg);CustomServiceApiCustomServiceApiCustomServiceApiCustomServiceApiCustomServiceApi75/117/**获取所有客服账号@returnApiResult*/ApiResultapiResult=CustomServiceApi.
getKfList();/**获取在线客服接待信息@returnApiResult*/ApiResultapiResult=CustomServiceApi.
getOnlineKFList();/**发送文本客服消息@paramopenIdopenId@paramtext文本消息@returnApiResult*/ApiResultapiResult=CustomServiceApi.
sendText(StringopenId,Stringtext);/**发送图片消息@paramopenIdopenId@parammedia_id图片媒体id@returnApiResult*/ApiResultapiResult=CustomServiceApi.
sendImage(StringopenId,Stringmedia_id);/**发送语言回复@paramopenIdopenId@parammedia_id媒体id@returnApiResult*/ApiResultapiResult=CustomServiceApi.
sendVoice(StringopenId,Stringmedia_id);/**发送视频回复@paramopenIdopenId@parammedia_id媒体id@paramtitle视频标题@paramdescription视频描述@return{ApiResult}*/ApiResultapiResult=CustomServiceApi.
sendVideo(StringopenId,Stringmedia_id,Stringtitle,Stringdescription);/**发送音乐回复@paramopenIdopenId@parammusicurl音乐地址@paramhqmusicurl音乐高清地址@paramthumb_media_id音乐媒体id@paramtitle音乐标题@paramdescription音乐描述@return{ApiResult}*/ApiResultapiResult=CustomServiceApi.
sendMusic(StringopenId,Stringmusicurl,Stringhqmusicurl,Stringthumb_media_id,Stringtitle,Stringdescription);/**发送图文回复,图文消息条数限制在8条以内CustomServiceApi76/117@paramopenIdopenId@paramarticles图文信息封装@return{ApiResult}*/ApiResultapiResult=CustomServiceApi.
sendNews(StringopenId,java.
util.
Listarticles);/**发送图文消息(点击跳转到图文消息页面),图文消息条数限制在8条以内@paramopenId普通用户openid@parammediaId素材id@returnApiResult*/ApiResultapiResult=CustomServiceApi.
sendMpNews(StringopenId,StringmediaId);/**发送卡券@paramopenId普通用户openid@paramcard_id卡券id@paramcard_ext详情及签名规则:http://mp.
weixin.
qq.
com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.
html#.
E9.
99.
84.
E5.
BD.
954-.
E5.
8D.
A1.
E5.
88.
B8.
E6.
89.
A9.
ThomasHost域名注册自2012年,部落最早分享始于2016年,还算成立了有几年了,商家提供基于KVM架构的VPS,数据中心包括美国、法国、英国、加拿大和爱尔兰等6个地区机房,VPS主机套餐最低2GB内存起步,支持Windows或者Linux操作系统,1Gbps端口不限制流量。最近商家提供了一个5折优惠码,优惠后最低套餐月付5美元起。下面列出部分套餐配置信息。CPU:1core内存:2GB硬...
小欢互联成立于2019年10月,主打海外高性价比云服务器、CDN和虚拟主机服务。近期上线了自营美国CERA机房高速VPS,进行促销活动,为客户奉上美国/香港八折优惠码:Xxc1mtLB优惠码适用于美国CERA一区/二区以及香港一区/二区优惠时间:即日起至10月底优惠码可无限次使用,且续费同价!官网:https://idc.xh-ws.com购买地址:美国CERA一区:https://idc.xh-...
提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...