From c5c2455ef58795c174501fdbd4eb1816e4730db0 Mon Sep 17 00:00:00 2001 From: gexiangdong Date: Thu, 31 Oct 2024 14:02:28 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=90=8C=E5=9F=8E=E9=85=8D=E9=80=81?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/api-signature/api-signature-1.png | Bin 0 -> 168576 bytes images/api-signature/api-signature-2.png | Bin 0 -> 304493 bytes weixin-java-miniapp/api-signature-readme.md | 45 ++ .../wx/miniapp/api/WxMaIntracityService.java | 86 +++ .../wx/miniapp/api/WxMaService.java | 100 +-- .../miniapp/api/impl/BaseWxMaServiceImpl.java | 373 +++++++++-- .../api/impl/WxMaIntracityServiceImpl.java | 276 ++++++++ .../wx/miniapp/bean/WxMaApiResponse.java | 34 + .../bean/intractiy/BasicWxMaOrder.java | 128 ++++ .../BasicWxMaStoreChargeRefundRequest.java | 49 ++ .../wx/miniapp/bean/intractiy/PayMode.java | 16 + .../bean/intractiy/WxMaAddOrderRequest.java | 133 ++++ .../bean/intractiy/WxMaAddOrderResponse.java | 115 ++++ .../intractiy/WxMaCancelOrderResponse.java | 67 ++ .../intractiy/WxMaGetPayModeResponse.java | 42 ++ .../wx/miniapp/bean/intractiy/WxMaOrder.java | 344 ++++++++++ .../intractiy/WxMaPreAddOrderRequest.java | 22 + .../bean/intractiy/WxMaQueryFlowRequest.java | 88 +++ .../wx/miniapp/bean/intractiy/WxMaStore.java | 187 ++++++ .../bean/intractiy/WxMaStoreBalance.java | 115 ++++ .../intractiy/WxMaStoreChargeRequest.java | 22 + .../bean/intractiy/WxMaStoreFlowResponse.java | 318 +++++++++ .../intractiy/WxMaStoreRefundRequest.java | 11 + .../miniapp/bean/intractiy/WxMaTransCity.java | 56 ++ .../wx/miniapp/config/WxMaConfig.java | 67 +- .../config/impl/WxMaDefaultConfigImpl.java | 116 ++-- .../miniapp/constant/WxMaApiUrlConstants.java | 629 +++++++++--------- ...ApacheApiSignaturePostRequestExecutor.java | 71 ++ .../ApiSignaturePostRequestExecutor.java | 69 ++ .../JoddApiSignaturePostRequestExecutor.java | 59 ++ ...OkHttpApiSignaturePostRequestExecutor.java | 51 ++ .../impl/WxMaIntracityServiceImpleTest.java | 234 +++++++ .../weixin/open/api/WxOpenConfigStorage.java | 61 +- .../api/impl/WxOpenInMemoryConfigStorage.java | 205 +++--- 34 files changed, 3615 insertions(+), 574 deletions(-) create mode 100644 images/api-signature/api-signature-1.png create mode 100644 images/api-signature/api-signature-2.png create mode 100644 weixin-java-miniapp/api-signature-readme.md create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaIntracityService.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpl.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaApiResponse.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/BasicWxMaOrder.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/BasicWxMaStoreChargeRefundRequest.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/PayMode.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaAddOrderRequest.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaAddOrderResponse.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaCancelOrderResponse.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaGetPayModeResponse.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaOrder.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaPreAddOrderRequest.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaQueryFlowRequest.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStore.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreBalance.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreChargeRequest.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreFlowResponse.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreRefundRequest.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaTransCity.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApacheApiSignaturePostRequestExecutor.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApiSignaturePostRequestExecutor.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/JoddApiSignaturePostRequestExecutor.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/OkHttpApiSignaturePostRequestExecutor.java create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpleTest.java diff --git a/images/api-signature/api-signature-1.png b/images/api-signature/api-signature-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e4d4e1e2786214f5ecf73a54d90742099096855f GIT binary patch literal 168576 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 literal 0 HcmV?d00001 diff --git a/images/api-signature/api-signature-2.png b/images/api-signature/api-signature-2.png new file mode 100644 index 0000000000000000000000000000000000000000..30982f498bc810da7d14d9d6da3aeaeec2a05de4 GIT binary patch literal 304493 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

Z-(Iw1roxwrKP?d9Z#z1FOVMWS= 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≫E4~F=)b^uimPOjLV8=KOkF-x%LmRZ0#YLKT!pX=3^71l8K zoR8&L1>Eu$&{uUfgXQmDWS>}Ai4-wv%F3!(zGpS04#n}j$A1gX(G*?ElxSM-&*ZZD zPOn%h*wXE%?A0^P=q&bfY_V_^xe?|2#PQss$|Rn$*!MK6b2OwoA+nCgvlg8TC9@bH zFLNiqb%s>)L@vxf2oPH{_9%CKlxiDC7BICTS9!8{0x`Tj#1pt1OiINLs!eJu=?R3^ zSaCB$o*T$gK!}GR15|IjWmWhQQ!br^W1!HdX=1mCtVA6Xe6Y`qD@bP#V8|$=otC$ zLL4vywo+p|j>=V?)%HVonnn`N9$nz&%Je+)21M85Egv;J`_4W6)SI#kXRW6s%T0;P z$aid8cK+gm97K*a5bnYMoGp8k2JEn+Tr!_ts%B_o`1vJ~2(4ix60 zu8hW@k~Crp&H4TJT;*TQ+{#M>UPE0c=#qNwjw^nqYsqs6e0faah_lbF?UB2>KgCp? zceOtlb2AOqpOwWZ(JR8_js|dj2+qVbe&~R}z@n=@C(AiYE#ot%gn&DdlxqS5)82Ok z`1qX?!$Xk4YNw^^IpPnnUw{C|Oa+6k^1k*@_%pOw$G_jy9XYC*G_Z~KYf$zi$MQJk?rMt(`bW4Uoh zmTl*`kaURv|Hpdz-C1ESA_dcf#MHv`f`r%ieJxWb=)v0x`L{moOHdiRJXM|s#Z8ue zShb47;OMmqA!u{r&*{MsreAu0u$q_@e-*|6GeNx)=hU>767sRu|OzOWwR95YZ_Fn zQtoJN{X;HI?dg{!)Y0;ZqqWPPmd$4klZf~`;ay*Y!CRxi3gN)R1WIE6_6K38DZ*cNe)LT&w?y?fKoI;lT^!hkohu}n>6N0v7_oaiw+}BsTTU8sL z{)+)1aImUS%K0WOx+ngnxw3Tus{+v5;~T>-KEK>Lt7CL4Hwh5FoT{6or?Pu;==wF@ zQHbfYgjQ?owQE+!nhQxgk^CegKKZ5K*H?e6DM10@qongVLPwdCsb(JWkvLhLq0tB3 zxSI*<&83 zwu+hA*a{XEJZS7U-;pLft|y#pk9kamqbh4^AdbpEiVAJHIxqz%n9Bw;ZTMXDn8J10q+0o@FQZoS zOoo!|R^=c4Uklp)@uktzez5ATMWy(L&s~7#y$SA$V zY2>X{(P97$=hr*!?9U%79hkMo`96G!Y_aYep~e=rdKk>!Yu?`A`0IdYBsfdp(X^Wq zF-)W1+4Enl6O}iaPq=pOwZ(WMd)Slf?0^483uRO}bDw$Q+K;*k&`N&tWNk&N{>wLQAFTx=XEW-Ls0Z@KCCQD=_FDW6tP}E&iz+$UW=%TJlGLTdzHpyZyeF4y4&mc{MY2(2;8hXzoD5c*eiVIF1B6{?oSuA~c1kU3#73?Olj zXDFPraL~>HTSlC>IR!FpyF(&`8m*BXbdDO*i9}zZ`s(zzc$K|gSua}e4X-{%@C%~@ zsafN-znGi~n30Wdj(wK8rRzo!SRMFu)8f*0P(?QWLgUs#SF~5O)=oztE;2z##X1R~*rGux{4S7EAOfh`BUH7K!hL4*; zqmiA0B=%H-sre6dJeBJ-%Gb7m>0!px;&-s`bi#1Vd=+)z-9=?;F#yW1gU z5Bozm#s18gN>|~I^9LXBJH}MyAA|TOEVHCTy2PDyw-)nUR#M3#M4mhu>=^}f6SO2cD4??@A=Th`D?u9G z1M>um_hxAFKnKy~4?1oTA7AIY%qFH3d}7-1Rt1i|WSZSOd0Js2KYa@VM*^B}VZ(d~ zdYf^YSNSH!^Vju%huOV9_s*&))> z#1BWFTU4^Cqmc=E@*rvr{jqNTQ_{z=S#7}%vfw40T)x+D6CllaK2Q~wuh<57FI$HN zECLuisnwVvPkVxJ5szI^@@tJA@~j<#6fr?<*=8!;nSr7TBVMk3Wi03XVF{s^U0G4w zwHaSjh7g|Sr$VMZ!xR`8-C%Uo*c@)JcR!3j%u{2~wcl(uj-c&ER5PF(PQd=A$|1l! zsH!#qYCk|6HS|LRyY;tm@ZqgvvhbMpMrdn0F;;`votXe{=L?sJw!B-=i?0oCN7^e) zD~N7U%~9mG_xu?%X*a+sb??J{6B3IuyB}260GRzN9as?H{Q20i&FC1{1=q;6#_Ol+ zY;o4)$wFp&%f2`Q+l};N&BV)0m{zW@1pYPxIY=rb_9C*|xMyvdY~QG>;nQq@(QF2i zR$Z9A<1Ea9I3>KNkKh(9of5R1Zm$CB=xQv#D}Bul38sQxWI>TjQj?zk&nzJuc>`1e{H-!C@2iycbXIK^Q5COr6M`HETZ%Bb$h9y~!>= zY?RiTRo;StS+@1;O;Y(QlPw0H8P=x;?zS(nmi_w4r z9XY(diP4|}P}lFB=qSD@1aEBL(}Xt`gtZ47xkQ&Fp7IzD-e$K@t|$TlmX8n$(wdiH zi9dV1i4a)YZ8KuC`E#FeQ_2xc_weCQUGMN%hcPFu6GV|GTX(Hr_~s+`Pr5<2oXm#; za#sa6gbN5KC)m#KZr#%p$l`T-KBB!Vn0!E4wq3P@3KY4>YzUDe zXuYS1`cxIb{dR&ON8~KDCRgQV4wUN7JkEt={|Ud1Pl3Hb(?uh7xX&cV6aFsqYSGQo z0<9Gid1(SFP^E-Hp_#G$FGi>7?sfA!#9xbxG=AKKj4GeZC52Fhg>ABPH9lea*#RX4@qvz;nA4Rh)P0&#v)R(Q%SzvINX}hGM z%d%yxIMlo@OBO2YIMeAoV=^80~G2`;7$Q``Q1*J#-CJE z7sV&lX%Bk82xjf_h@C>IIlpdsW$&)B#%vSJ&9$)OUr<`92AkF&=|8oEh@iUK79KKs zoD+OYu1eJQ+zPjS1i=}i(ya%o-|s6=0QBBI0wywyQSm1AR#pLw6~=eB3XrPhw7(lK z2&L#|@N+Pyz6o8wP6r#&h2ez69jmVdWWTiVlVABPR?PyI)PxnmY~uU9Bk1k{DR&KG zpk`{aQ?cmJtvqS`TO2kT@(IQG%UE}wOBtTsV8>L-4WHukXXQDpMe@h!d;;ZbT;`oF zvQ9qK!FaEU_{eBqcp-U(`BT^2_T&fX%NH45zek>5%vi zJP3mt8K%)$(@1oJ@M_JIRPuQ%d;ZU;b(aaY)$BK5fg6{6Qd@eA)#$k6l=1E2N8Q2u z2dS;iBiJlz&rQBu%RpU5?e}O&v9@Z)KPxo)$a4CIL(022p7dcAKI>gKT$$qDv1aI{ zv)p?sV1#r^hm!V})L4t%$@1i*ycZWn7Xcp7jO0&$gxjNZ+TZVGhVtI70x71Yt9)05&|8+quX8jFG3g(c-Si~hIHizJS%~ck7S!<*Ws?4eeMg_ z=y{VEi&=$Tfd@=_>4N(_X$WQr=J@rnlhus~+qD$v*1#ZNbBf&YOhDgfbJ#N39iO$2 zYe&IPC&1bx$CUfs-ge5N8u4fMkfb>f)7Z`*K=H_oR`@;+%JLhez;rD+kZ5zO2A~TG zEbJY7)Gbu)-ws^E@O@qkei~%K@Qm>{?HeDz-MtsTOa-a{<+5d$5m=MjyR7n8kU%1w z7i+PPmZgLCG!ZS2h9pSbtbuKSOP#S61l6#DYIw?W(0UcI)Ty~Z*1_PSAnD>!hkt5I z|5SVPyln~yTX;?M`?pvt2*r3aVyeN1@bRhpc+4uXsYQ+rv#pJY#NGf$<>+ftnQ+@lN(a^v3lKSmw7et^>&%+XeSS zcr_XF$t^!h$NLCiiQFO00+r+57UBG%S&{#9h;_JWBH2aO;g@Dx8x`YOkHV8RshVFd#V3=SEScG_9;oHBRILp+Ho@?=&7DaSUxsOBa7x!?0P<(XgkiO_}7+sN``_f z7@!NZZU@!V{qC)?cH>P=cUM`hxPE`iCkR^gTaWGnB~%yA;edEM4T@m4%ApS5kq`(u zY6C^|)+UrFes)`~`BeYalxLL4-I&QYXPapN-$lC4Gs#t}fD3wCa4_A=eEpd<7FWLO3>CH*ydUivBOu!1@eJy^#~VO~#lKM| z$uG=grXSSO6C9J5G=Sanf?)T0XKFDcbsk8fKDd{<{(22Zw(H%XtAA$y3H1lX?pUk@ z(v8=#T~bff8Nc5o;7Y6#^;zXC*0w-Jo>3&D+D)Mv12-E*0tAp)a~~$p?sy(O3(Nx2 zgds?81yM;$>`uJ){4ueitTYuNkZg3yM;1EcnZZx#C5E|`HKC`iwkf!`860nx@)Et7T8>_hSI~;<2 za98ZRNQD=)-8B~ZD$B-2EpJEk>R=g-L*0Hl*r;Cc>s zJ_CugSOhZ+S2bC{zdG<@nNeMSp6j-Fj9$KGRF3HS`_PPJ2hiE`Ri#2k(vKX6Pnh#> zz>kVW*oa-oWjF-gS+PfoQ$9OiUYr&EDyWb%h-V&wcC@&pYo-avrWwwx=W{EqJSB~( zsqJBB;nLucIh*OT+2d9!iXFuc$3jkPy-4|#8};n!u+KifQ4>y4#3~mOazJHG=pTG9 zl!GU^hC`Ac*p&5X8n;W3I;+dbYvsrm(lqiMeLh>azZ=CB95ad{wKKP4J^WPqG2TDc z;vj<7>AAd});ljH_~MNUUp9NNym#`6+;=|_EH2F#^37D|#v{XhOjI#L5EagRr?bh) zaERhAi8+G*ZK4w8n-YoR55%Y9-LDoDI@|PQHzt{L#ifwSa+5~XK_;3_`4Et-n~$-M z6G=Cp#_w^B;}0DKVmhAOh~^}v*4*}fos+FT-Gz966R#%-)*m08r^IGi@R^fGP48H| z=iFR4@+)1Z>u%OI;F?-xTvo99%KjCsSqTa^fY8f{-7zQNk{w9;6ta&k4z@{T68Hpt zjuWT-?rKrLgAOb7Yf-W7Ty6c)c=$~kmd;4^$V{RyV2<6{V?yZs92pl)}*JEC)L7j(GQC%FP9}iOLM{QT;1G|x2>-wP&-XAa833dU*!Q)Y<_hS8Ho7a z6k}!yi~6bX2bl@m*uHo~gNml#dB8xIrj8eL3Qt+h?<(zvhD5>CM@j3}=FlzLUa$b+2oo)gM zlpS5sj~9xUAjL5f{W@5kZ^#|2E<1eC5 z!^y4z))U_PoK+I2dhO7Gy@*_}++!Q0)6}n@EZKYT43`Z*9t+Ngs6wIl2u6OAkeXOW z=m)8`I47{vvG1@)44L+@Sh}Q@3h3l|P8e(mn=S?|$B78j5%$e!P(B?(3of^`PMnT0 z9-?1MAr(AY z$XD0`i+k^_w`B1T9%vu9XJ0sXB}kyLNOf&WyK$kN`lO46avmRgy(i3gI&Oq|8wfT1 z>h}+Kppf07PIspzHM0h3rMQN_z2&-1vy;MjlFezRAiu4xGq z@ub|U_uVLJl5cUAwqvnMOyA`D%w&|#s~d;-eUrGIwkb3inL1FAFzp%5KeYxNz+3P3 zFK~L&*GFjSf7A9{5PV7)3X->2!Sm*8STU(#+wmeLo!%83CV#hq;NKEFd$M`N0Q#1| z=8xc;JOLcwtUznTrYINDfl=`og2uxK-DL&uX}GQ5{=~nEa)haRaej<_wuq1S70jel zBp<2W@(7{-ER2!Js7J9S6wpefU)bdx3buby;RyQu+wx04aSYdPo&A=xi0pvDmLc(C z#U9*}%3D!OjT|2#(~{dj@K54cP|5P+KB*WH2$I=7Q}Bt(V^gxC^e1wa&g-jVFy zX7zZh+-kS?ZYR@5h()}C6Ld;t*B2$&1bq2|yupTV_gM2zL7Hv02=2ur&q6uZLNbaV zsr_j6`_^oldb*suT;rR%VB`e*h=4>z?XQGwVV1Xo8w zS-eFWKVHGjE_A*M!yHyY4XNGA7L=?abjI1zsk=D@6`e;Yvk!z-j2)pW zQH1(G>W2tKej4pfZqvsxYbc1m5FG0I!INb}T@le#}`ag=>#Zmj?m2foY3I=c8{)g7Sl`&!Q((A>`F z7fpawq-u8U9ETog*!#Iq} zE8!k778zKbL&tGmCOI@Tzc%^hYoJ^isC#)W>d0Se33{M9zZl7wLm*#xA-0#ZXGNXJmpp;8iph?F!VCEY!UQo;Zt-AYP#cT0Dd zs)8AbN$X$%x@(f*v(f-wTM5;Q@`Vv zn{7+@KBU!0yDuQ!!6?A+v^%j(a)4wSH${j?(Z?G{<|-Vqcrni&5n=3^gW52YDr-y>K^1Z6Ya<7z^ZoFcFhO$h=az~kH}Yuj2AjXlb~2~Iv$KDr8b3N!#@7`%b~9MT4i*&> zM^aQHCJ@;-v|X>crgks+J}N)W0*|LlW3dQgRDZ=EMVFz<2Hxqg8Wb{akF>=wpS0(_ z%hR>;vYYv-TNW4ASm30kst(NCnvrxj>$s7VR@z4;mtl}CBhAPoWlc~$#E!D>0oKyd z(y+4P3*|=~s*M#IeH_~4U3w?x;f-`+46cHCS!!+jwv+gG#S(XhLj`#{<&|fXml=&IoP)*~Co=aY!tp-APim!PnLzqIt6B z$4T_~-L2(|6K!*~R>vvb#h@&^uO*4N5{keP{;fm<@eY+Z&DV^r>fzLD4V3kmrWHu zHdGfh5GO9-&n{nCZ#DX!g{?Zy8k3ln#;%h=JfU+;vy01Ie8?X4^^;YO=k>R7W_uoE z@zJbQ`S`r|o%dOm)l@`({^aI^&+l(PqV^KSqh2NoA%X zU!nY=qzro7iIKTbcj~6Pxm&H#DO>jNLy(v^Zz65WPrpL1qOaE70VgH;A3e=6Z+SC@ znS0aLQuylA92ax)SqwLcP2LJX7Fk=po!7~qq|XO?9;aQbKx}l?1jv_;QiCP4%GS0- z{t(Nv3GVNKXCY)HtQ5cwJwv*GV>_skur|qpH+=3= z=W*sFik|bGm%4b(Zl@@kDHhsKP7LAj)t@AWxFLNuYsNRDw~pDvlICEhnvYlEaIqcF zRwtqLU|Mp-0|YZdL1ld@`J-0o*pmYN?K$%rcwMe+sV=MdWp6btLa>Q5ps6BgQxa4i zCyC$e1?NIY417y<7Ot1m)2Hn(EKnIo%KpXPH_)Gd1zMT^q-Xvju$onq9oYWJP$hC9 zkXdSh+(L=aFdEU3G~wL5vrv=eB9c@OR7*9XI&Y@5MWcbAIB=kJ){dgq;Igay4KybKKlV=DcSG_thUvyGqg-==j;* z@xlM_isa4<1=^V~#wqujEJawa0J9@-(raV#cB_D_&ZYl;E>Ra!a~ z#HY&jMhfVgx&*yp6!$sMQeaODn{E7iO(Z!ehl1lS43`P<99*W%TYBIfcG|XzDm`oQ z&THkQ<)ipU1-}Sm9t}=4{606O_(D;qH!VNu1$8)JcVe!Iy7%(?z}ldMC7}tb!o88fbCfZejqa)A}SRr~Sbp|2V2wIo(?yxAw=i^Cx%SD_2WbJ{Mnt!Nm# z7B{R%OP9O_mmCo=n6wzQVB>aBo8L#Acnh}W;@R-&TMWS*MZgYq&oP<*Q4cb6Hj%sU zVfPuxf?kMuKUj4eb0Z;TX4Y^Y6tHiU@x#^7Sir*+>bE$N)ZUx3NI_dK{rPEHMevcv zzH^4~CC}#vpIQoX zfd;{g)QkpXOma#;f%wLRa7p*-NOwc(EEOAhfWgngGcLtr#M!;|aVfqK03VqhM+JE^1{{=0&=KFEdl@X;{5&y* zK45BTXF3chTj;B%u`Jpb%<%PL;0~`u#wf7)|V|a%H5zhurmPfuh=I`p_-^XAehc zp6R}E*wNoL3byb*Rtq+fV?myTxCxXyki%B*nYbN!!>}j#{hLZue4J|+u}7AJQ2d|a zx}2UT(P`LBITjDYFl^Lk6zk%kH}r9K5kmGB_X@JG8R_)y7uVHzD0*@$P-74_KD?E| zh2(D&OGPu(dUBh!*BC^b<$Xz$A+-;4h#An^HFy^L-IowQ~Ywy=vxFek{&rh?{7+VOt(hRyS?MR}|r zu&04d2eG-OM;WR<=ctX& zqaP5awjXbAFv)rb^98hT^&sj*bt{Z2FHjZ9Yn{TcRfyWAU=Q)sAIrMwlzMuynUyB3 zZ=Hg|4xp_U-5#GQ6xZZjX|@j8KQ^1!>1Z{R&*-X9%|5L^OanU{1um~@Znqi@5q|cq zjvmQ!PrNkxXd_7G(y`gVA7K1MWS*q)j4t>)+JP)Q^Ygx_OO1CkIJh(Dkz!vnFK~3y zA?1ZOgO`slN;FnpX)0Y4jk*Uv@CX?ne`?;gm5QRLOC@Y~lWaQ;Uy)M*Cp2XCB*G~=->kf%8+ph3c6ULsddHZBSq+LIy|Ee#)ONNscrN&Mm*BUI0hrd2zS7!jH0+cNcU zM0KjKj98W2XKiY2{-ACJUl88qOq`L(TO@x8Mxv)M48(&}I;a~jLK7%g+dF(4xxG!4 zv8*QgN9Wu@kR{_g2Me!=VDDj?tC}P@ob(+-^m_fwvW{O;bXf$a2+NtE#_o|6eEZ|H z`NrlSZ+IDlNz^(a*)`gy_zbLo5W9j{P)CLG;M`*$AcOD$PY!x!G2_nm4Pfl$0^HA2 z76%-QZlPNwGw1R{1mpj}OC$k(3H;EA0SDy~Lio4Ewl`RZ#l(zV^4?zN7*nO{lyGc} zCm#0{C)hle0(ZXT*~E8=qqyZ<26>&lvl7c2OB}PwZ5A8r^6wOdXF~Odkuaqy;UA1&1cYROYX46yrrY zkhTF$zn&0OM=y5eT;JB{BYF#p zmUO_`1wszoc*wXaHQ<{4<)wKMq3g*%Ve-dAze579V08B{dgAg0n}YFi z2vBJs&Rghi0>i91d=TS5&nK;)oGQVo%5!_)AfzeVJY3>iVBz~BYLH0r({%T`b2k7? zKvv27luuT#CLZLz&8}wWLcX5+x;*-F8ln*SKC9 z1mPNtlpB&2MQrA=BR*R%aW4UP4{pZyH1wGO6qJ&1N}HTz!tvHp5Y{5uYIsV`!GJ;P zb8}g8Vl<%tKF0|ket4q9+bACoPFcKppF!`+_oljxq8!`C3^&)G@H|Zsv^Ec?VyrJN zNtWoHQuRpo@9HE>w)cm{>VEi=xatnO&sbxkc^-O93PHou*AS2(;e6lEp5@J};MV#% z;G2)wBnQU2ur3GUaj1My_>@Zf_FB=UNj*q66C5Df`QlJ@kMc=qbV}VuL_Qzlk2VS< z&Ln%A!=%77&8K(?L2;}p^-uTaIxl*Ud%P>lWH`G#La`r$Ce}8r)jMRBXyk2~_ZK)P zq8PP{Fh1uIEVHbwWa41xAT?n`C6$+nex>U7Cn;n#6R}J5UrioJi+SVYZt<{ung~H7 zjn|_;9Gp*a-u6PyzN-%|#+SM%IxN*?qspK0#Alk7H;LniM5N3Gp6NfQ6AWL( z%RM2-@?!B-Lk2K^OPu%-2%+rja{Zz#Ye!-2-Q>cCh=6TaOU4#iVtredCjh0~Yev%z(a7!sLY{eOhW7k! z>%~V}T+b5jNooY&g*g!n3iI4RZ);OctSvckHJuF{tDJRtvzD>GHDxZa6}G3t`+3OH zmG;&iySTucd1YvnzPZ#};l8Kjj;r;jw8$s~+x9`S_+1a)UT6(C(r3dr1p^{BE3($i zF9q#u(GN$^9)pDzmmt`;$!29%!>mP(%%$R1D8jq7V3;I}1XEmF;n3==oeTvS0%W!? zpAxcyLs=s}m|+;@_Is5crIuDpcG>OE!9YuWt(^~p^Fk^uh{#V7R-03rNB`4NPH zuA`$Apidz6^rLN9)F%0??B%1N2KXkFx^Q+;2 zB=HOPPw%{}c>TYfP)~;0>ao6iqy=}k;CPZ8z8Uxx_SEImP4DNl1db}Q_j|o)?zfs7 zNmlFSalo3i$OvGJ&uk~#rIr^2lcU97hQFn=O7S4gZSLLfWLXT+r}tQ!8vX>rwmv1KKL>lQSV-(dJKs}$(8|U zx^=B7;*|31i=hm1s+1to!ms3j)ngR$)qoKmf;IfVc1h_^igdn&g&)65C5wD=q}`9hVuHneHrHY!W%?ob zh44&3(tfg{LktP_Hok#3hUU;KMYzoXVN|@9o>+eq>x;fwtHLoY_#X zP{GetJ`9v34tQ_blr>nta9N|;2ol;a3}i~ z8}Nl-UlJ?-$dUkD(FIJR+)?L~{Uwp9np(m>g1Y6-@#_qx4%NHpO7viVxfIlgo)Z;)O%NwGye_l~} zwQzwCVMfsIsH-$Z`{c0kds~yY-LFyXH~uW}{_^Yim@36b!;2nY$4^7tJDrt^UvbjR z5631L<;4O*lwCm2kGrxRqE+@YPw_{ugalTJSn! zjsFv=Oz}gk0pX9i{qxHtv>2WD2wHkzQmujn^#`v)#&`ps4c@nf*kR>Tx*S|2&*9z&ZQ{qdL*+r!p^GbGN#-bPuoOZR6RoyZ+n^dgJ4y-kGrS8fru;aGjenG zAD3Vw(sN=c&J0RcWs(9O-t?7d`zDd5*lVXd#)7#%-4g;NYt7|saGe)#aF{}(V@kc1?3K!2SO9$ky6uZ~ zEjNN!U%>94AK9Oe=^DmRwKqQTdB_lQ!~s)7S9s1(vcK8El$KqV{l*tU6f6+$XN+bM zS;))OZWG@TEcy25sTMdzGP_r(zsvQ&ohb_a5?1cgW{X`BW#doU4R@=Q#~j>obct%* zRkY`Wyqd&b6l??Wztr=$Qd!M+Rx|8wh%RGT{I)NEjKhXF&JL|Aa^fnB&1R4pHZw+L zp2XFCfZocm2==nuJa@-oi_9I_+4?$XQkrAQSAuQ=qMRJ-89_y6v8Q^!GS)^jRlS_wWxoCC;9v>JpzP?rMZD_FSYhyB3S9;k7Hr5V+=Mz zKCwCuZBCWTAUtG#=a}}1FF9BI=QVG%)=L7K{!f3jtoc_yKOi5uaJe5s2WVuy0`%{5 zAoB&xol{>bm*K0kc|BFn7VBa)9D1uh)D8a_7SY?AjHGxpRd-(*&Dz*S@5ASONXB&V z1c@k!ee)}9d)AC*-Hf%arZ^U}8{f{FmMWmgWny3bW@+zv0Ggxv za!-2ja)@03+#>9!-|`OFK~B0j3|l)NVn3IT_jWP@6}C;5Zsz&eX5hNSV^W5m+SoVfAmlR(Tt;oBIz_dJ5Vvoq}I??NK zhI;u0x?PSUIBc6=yc?A!-r)cuOEhK0Gr8!Cg#-Piwi)`D%oSkW1y2>MUqY>%GaD3J(j$ zET*gzgQc?$kJG z>yY0hFK@O2*_pOE#8|bwaGd=WnQ(>=@3E9QWRH~CaC;c&Nm0W~G_~;q8`rS{vMe?LP(cgE5k!XTbHR!pZJQa1Fo%>r#!SKb3(!Z%1)@GS$!1XJQi?&H_ZTZ7J2_AR`pv#(|>yBw;E zsw`h1T_)wKEcaq`9A<1qT=yr;-8nZx@2$)jk2u6$oEIm^_vUZM!Rszm;U3UY-RAf) z-M~IXP&HwQ;0uwXmWIN?1EJYI$(YH_Q@4SMH7JCY$9);$8{8VTI+^gjOut-*N_4j= zO#c%D75doB)syJzVJ@Z*f!`k|SF@j-hKTbYofM3{3iKsZ)f6E=jL3J`>Web+=-DI= zfP5WiUjTh$gt-lZR=R)a4Q4xl$j1bvT()C+Ib~y>PCLCLZ+}VDrrs=@`65Hx-IC$s zNe(;rS61%4YOY|s;7lQ@XqU0v1dq5(Lm;C`l9G=B#^%CCLpE>7X%$2Sf{PbCcnx|SXg*Fd>UXxO+tOnhoRUaW z0C^EpsMFvA+?4Gd^Qa$HY6V>`*TL5>G7mEnx0@f%r~rFU4eksa>d2r|9VJYTIrQN= zrar`i`X7HOHIz$QLgi&joPfWg0A;w?t7RQZd4{{pBD-ZuEU{=IldkOwjXrBj#Z6bl z1UbRm`jYiH5)Y8s54+>>(sdo5Mw4NeO2$B2TlITcz>-_5Iq$zQdVtN}CqsJ!`+PVU zdPUqXB05gqs8gitdT2yb1R3gE#w+ivY&7LCP_pF(OJ#Q5@}-3hGG=nN5Zr+*Z!%EI z1RBlSxdAk@XdTf<9;r!6&fhYf$ho&I1821S+)ENgYu@s9Hodq@SvF#!^~cf8SLV@ZTl?Ze{=vsgpmHOd$KY|Nu%Wrg3Z zEyml}11&atdU=n>sh|{&v(V}S0QoR&xRYPO9a4ORX~AkaRS?vAOn~hpxn>UGba1nT zlw^F6uU{GLwb+bh3Gl;7uwYH(o)ymwYDFGL4Oef2xYHrgFw=g{)$l2by8|SAI{5h=@f-}K z_L1)24=B5qV_o2E+6Wb9&$YUy?;RJu)>l0+SU{6Vqm95Nj4WTF_txVLi0)(KL9RJ?C_-9K7GX__>;fM0k`wG#7J1J(Di$AOZP?C((@1L~JR`mUd z)<yqj+s1F;p9Rh3f8Qee{8#11^h8b}Ta3Ep zYnkBW3qnKJ%`Og_!kY6MxeK*1hwQAW#X`%mbY5kRa_60~;attQR4Qj4!g~w}F-~Km zX4ZAC<(6u#RU#^^uJ5Gz`FuzUErp{XA^}_pP~MTPEsm{)NnrcH;GLfX@^nIxXq_m? zZy7GXCoFP0YwsSqU3}L;w(n}3Px@Z&@HQllxzj#z4xehry>5s>0{%U@+u!05qMg5R zubL5d&m`<9u^wb-8WvBLaXbEdzz4_#C9SwRG?T8Gi`LH%uMn(%shgfd-NV471aA|B zVcRt`cd_H&_tecD!fjuu;;EuCYkyLx-C_(?N*@|~;m*n)03lDjgP2j#N|-dKMEul> zY{T?nGZL})wC$C_N)~U1od~mFNKKTOJCcjnoEtdZJ!pf%ZjfMd(X(Ru8X{j#GHjKw zuGRG{wp56Dm?#E1{A8$|kH2esqZ9UEY&Q!LFuq}PUGK| z^t*NL*~`(1m>0Gx^DGra1LxzxK(By=*_;YbELC*K@i;h5kiBV5-FB_wDoo!JrcP1Y zm8joRRhpS7quG55Z)5yEAhbz3L~f}wEt1AYzYt`fpHeo(1aqAmeZ1k<{yN>%113dM zdUUKm%uDrMyT0iJq<`=lM&m&Xn|9xD4xV{8)*k*|;%9ddo;@ueR2Nh`HT!r&x@9=D z7;>91Q%uH9&}iqD*=X3CID)Sdi^1w{7X?3{R9P}~BJMsBue_NDq?#eIo1ACR@AMHo zO!n{=#yEjJP&4FRzoa^qvZJwA-?Y=Lj46j-evRz()z?^{@j>aMtSBx=Rx!~$u>$%C zdszq4lm!2*ZS@rq{ch2FBdK2$;Onc;2TUpC*a^qlFE9bjetjWUDU99#C7u!=$>U2s z3+A=xFSg?}fo&HMvVbJW0@9XwE!~1O-Ts9|fex9ba9QEF?`OJWA%6Eww>cbX3WwKv zv&sZJ6mo1TCJ?vBrjTlf^ug};iwv2C%49iXZL|1O>N!`_9fd&_Beg*eEoRdrZ3btl z6vT!nClQNCW5KC$`of^C$($gMf(kd;x!IAn(U`F|3}9$}as>8W7UuQizE!1#3kH6NO7(5)jjaU5*s>>U`^sA{z2C@#{oq_{qakIfV+6 zGX`$&UY8?Us?tQcM=dnh%Pht!PoKrSTUV8RF@-l|-v?#ZiHcTmoB?}syC1Y)k^G6C zG;Q0JR`+uTaL+z$sOD+bgj86{%k|e zQMf?A3g6`0hY|M1Vo%~=Ybz{BuVI`4`Zd3@8O~9QICl26si| z!cz@VdeLl%m{y+VM`#@+^Vy7nNat8?Ii1&!_@p#4 z;Kt-;sc>UpXt6{zWpr)Sfw}ym<|m4NepVNr(thIi1s?Se zW@<`Lg(c}Wy!4wg2!IqkOk*VVHo?K;<@Ux6ApPzd&L#sJ819+3b9b`61jNO)t=*JI zYKNpfChhg0Y5a2`z4!_3^G08m+NUL{FxwyiQG78%o{h3$S@lvEyI}WHZDi#?-YUlQJ?gWcl^5XUw`edzs-Y%04s*j|3BS{8qU`( zG!u|zwVZ+1U!(iaZwBr^1m6HEo4bZmWd2G4{BIvI5xPn0JGK2qo%&x5(QiL;A@`)& z`fC5sv*|SN)1D z_D^@NE!+S6{B?5ue@}8fuZJ9N$D4Q3*;OTeH+|MkfC<2xYz@f2b2T^6u`s*I{k}3S(LhUIQ3v*OERI6jd3O7}Q;FF0r%a6Mi!a;d{435z1v=(0EtB=kXX8&?(vK z1i)sbVy{2nPo(VKqWk@-_%{@o4jK1Sbnn9`9~*Ee!Yi*)ib(HfpV*aq7KLxWV-yLu zkvD+}BbXa7(IThnO|F*UO6MHqh z9JD(87P~!p_cjb<`7uxr@A@F!Z>C5EVbmi>@|*neXq%Qg!kV3cLMRR=OAo3SG)|lt zPWJZR0OC#5i=d_&iCF+pNt?P)1ToFwfjrEc3#!wyACP2{1*Pngn&seKqTsr;-1l1l z1hK9M3e$j-gPWfnGtN;E4YR8+^TK{nK3bRhXbVOAya1MZ{eml)(sl0Or z6hV_kD>|QTmE#cWIP1$w*A7ULr9rj;ki_}aFa->^tx~ngi=5(Kpx(fVHR>7z{pDT) zD__C@D1t2)ZPtii^3-rs_Pu>KNIR73VpVz`XtAD~xmIF2)FgIwAjYt`0f2Z@)gfwk zMso5Iw0)ZL7;Am*E8M2VH951Qtez_|#!bL6*Dt({CL)&86_#=M%jbn59;|Gh0C1!0 zV^5p%k5#`HZ@rhOyyWZYMEPHmp!fYjw1AzF-hJK6=M(bw+vp7OpI4S=-iEzs0vII` zmLW0B`z4fCIz48t?xDEg~mxR)7vycY? zG{>X_p$vXW7r>{4Ixfo*zSW8ef{#(S?ebFZXnZ$hY($rsl+%Z&x|e^$cL4b;WC0Zy zrvnQ7m9Bi$uXCH@cGzW1y_&AaV-&F4{5`Rgr~D{rzrCYYVqGlM@wpS^SUqJOfF#bt zdM>z;gO5U7E5UB3RpGV;`T_W&>V(&XHpYN@ki*)EdK9*_MbXiyrr+LTyB`X#+~W%+ zvYWflyy9%qET5w8q!sLoI>Aa3xnU6x2e-Yf1)xU%UkmvQMaf zv#-y2ZG`=xX~x|vN&up87XZcNwXgxO3Vk^tZ9LXxAP!q6Z7v4V;Mc_H z&&wxQxFGopsjKku6fBjSQdl@6EXI}B)aweF7lq^aw>YKfCRPAgbpGc@9ED|9K=xxJ zt(v^i=Yb9uITOLBP|e2}#gJgMHr#}uCe}Hg&w?EwZr6wmvpJ|NM&7H>xK*#CoqhTK#*nQ9|$ zPrl|0l`weCH~S&v8d383WEi}kYvsXm4iv{?A*SsVk-`96a9kp7MyOHn0)S*+GJkB| z<=!SjxFWnV4xkvDQr|oUqy!s6WDEW~zAFpG8vDe>t0(}e|Jo1sYfZg>epLJ#F z`KVP|H^DV%yi+oyFh3{<##Ym^@$sEEYS04zJIB7iJqZK6FWzcuBI#>Nw~=AD2@~v{ z5-iB9LI7a_j&fy)U6@t?(3i>toWKStc?jua=3JJmu7M`jt2tnnRa3Qqu*{2HE{Zk5 zNVuB-1WmI00!yD`#YIkje$?*_XVO1ij=}+2pV;@$1*2fHKy z*d+_77i;1#Zff`-{S$x}Pv)OI+6$GYoG2Cb z)W2Nd?&YVwXz2$!vwE=RXPrN4it;yrbr?49CS4w8Snqc*_`Tqrc%%jBf`~J?PimzU zW5#c!8sK4$5;S|P+=Vx9u1gn|#Z44)Zw1inK$*^eNgDuGHDf+R_5au`?h`eg;A|(y zw*>HaV~@@&05Q3x)Q)y=$r}cMS20@HcCnRvf5K-NHNOlEaes6HSk=8UvMyQUy4o)ML&AflVtNEWcr!YBOt%Lh42J zJ3-3u?Bzp`vY#N=Sb>fxQv84(Yz9zmagBQ8V>%^c2!21XZ<4^k`m1yzRj&=q|3Sl# zvn?x6AwWe4kf_PvYb)BynvUYn#|3qq8(jh1{XXAobs;!-MH~rOO5x3_jXYB-SdAUL z_r=^nJ$IilH|`x&yAz(iJpj|02!${De!v;P@y6+P>UKfdD(lNrxF0$`{gU=Y_%*fj z>k>qBJJu}J_qil%`Y)CO1R$mX0OKJ>VGX>NSi#e=tXw7~Dvy4J^u|{}177@MlCpU- zoJn~Q5l>S!@3oTK&6M%!4SkxulD~rJa=3C6P-sZWJ8j)epe<}Vn7RurK7I26$~dEH zxBUP|T`|QPFMjTt9r)WvZNR1BFrPe(DV@K0OY3AHMG9+|M7ZYH=o*@y{XB&yDXLJ2 zLC>3BEkDggNQ%{Eq|q-0+#^tG@GdZFWqSzsdT) zEET{jK&~P_#_d0T{rZeRuYkL8GP?}*uL(sKT6cm_`Mbid-+ktZCjQHefzc>qFP3=U z`8(TR-aPz!&IP-;tE;Qzy{I05^O+@&f5U%z|A?|*N98Q4>oFTiPJTh99BNpJWPj1( zE8)#%KODul<*4tf$2Metzy4Zu+|PcysMu}PrbMoiwf%z(z&0OTv~zz2PU?(kFmeH| z5uo)`45p+Coz&C$S=O!)n9?%uE`5isE2;3tB`Y6Lpc0X(9e z4_m&LE-{hS8!yn;-yAPAtp-BN>a}CbYc%01{s!Gv<245OYu#7DH@S^_u>^wbM=cJ=3Ppl%uLG(@D+Jbc z?PlNGUO?36YqQvvR-_Qi!vye-)AR7DXTK4%0_z7)oV@PedYa*7DIVIOhYRQ_P`Jo7 z<6Qhtu`{yKGh&r5$O zy^nlYW*i8q2B?;g|3}*K`=cjM)clQ`+xldvj2vzV%e9gDGJBz%QDD1CNV}B^VCJ7z!{3!U zo(mgz-w)KbKL3rI^&|=XGc&39ZoGiqpDyI#+R%`$=x&A0V!Sec^R8VTYTa}T++JPd zr$*{0!@EFQr@F@W-eP>>Z#5eM`sW^Vz&m~{TY=WPbAUQ1dir4|>>8tB(cchu%yg9{R0DdzBp8gu!gtnWZXvbvFq;|^D7^dW1#ezPxf1q zYb5wjugr zXpk)O|JV2YQb^ZU0Qn5?2y|B~^Z%=9{?51liw6I`R8MpP8^4Vyg7}T$`S+(dZlgSc zo5US7*EsN+3i+4IRZKw3czlD`{a4fU{R8C@{G`#4_^(#q;~}8!!H3h=Hg5lYz<<%R z0hbz3=xADx0vZ3E2LIFRK|S&n46rT2C-LmRn&$sy@_(}s01^K$lmCv>{x6gNyR<#I z`Ts9Xj(OKhzz*(Pi7BPRY*zSnEWc=wJ^YE+ABguw)_A)CV6CyK$?J+m?>jySx}MPH#hXPDaXs+@-0@DAr}OLCdH3Ti%1q0P zRJMojVuEWoi>%v7jC~CuwI^ne5OY^g__s=ingA!J*=?@+UCN6o*BO{|F0j`W24vRi zK#|%;F$F(p0H)2vhgy)j~)e~>rtOy>|EiZk`v>3 zb7XBnWMkI%kks2Tm3Aw>DykZl^JU8sef7J~K*afH1^WSa>-$9E@zw)A#6EP9>NKb} z!=?p>2$kH#onD}&DMOOGEKonVl$}>4JLXjZG$Y%X^9E8+V&-+HE81O}7q({rg{Q22_x9{hfjvrIjKXc5Hp^hSsN`Gi5O%S75X84eB(lY?)-J6 zMZSBJ-^i{el&}Nr&7h+iaDl2<#|xIe$nmmG=1defbGBcK3L{rjOlw|J$}Qd6%{h5N zt|olAON&Zl-*1jB$*s}V6-$Dy#8|h*82g-2IaBA9U%Ki$o8}Cyo`jz|wUd)2y6<-s z91EKH0r^?JNnv69K8HaW2EPtvdcP5Rd6SA+72TH!@`n#fdh;~0fQA<6hH-I4f0*|Au@G8D{qcA zWp5EkRVuc%-J^14GzWDJ<3IhxFGR|ZRQ8oLv@Ir{qa)I#kq?rM)U>L6oKxK^h^=@9 zB(CZ1*PJ6HbfBlp))1a5Y;T|#j7UFiZ_&+u6_wrABS;R~1Of(;$?|eCF##Kc6V2D= z3Q3%_6bnEm4lC)TrQI#pza2nD`~G!PQNw604M;|A&L#PgKWKMdn)hoC9FWo5`@U*v zEH#QpA68qG&Ds@3ep)~<@2m`n%!wj-uL24Y@piq~WD?RbIFu)i9JUf3k8f_R0XvAFw(MMcyfVS?M2fTN zL=0c_bs^W`@4G!#9^52+{FJgYiJj2{DI25}FAwMKy{ylT_GeGzorOk^62_BW1YrzI zw!uuxy4*EAmCenFC4KhRl`78$LOggH9(FA%3gZFDw3Fw>(n0r3qvFK(IM~=FIj7LeogE#oWB;YLeIpFsqBDwVce;eP;IkE|J`xp zkEUX)gC4$Y4V_Dy^F4-=ctdyt4rTu^=#1DSWB^!;6)I>KxFpQxjov)Nig1~e8P33N^+j! zvyBYPh2|;s)-kME-;1}^jTR!8c;pe`mqI(VSQyl6x}PUChjXCn4PWmS+8MT1MrtFG zB8YKX!4z|?Vm8R8+fFr@we;|nsr;K_+dn*iHgxb?O&*%AvF5kI2Y`Ja^6i>~yj@54 zd+t}qQ#d~-L`rVo4SsULSLG#?AsunY;C|5@?A$uPeZLwJG2kHPYv{{5_^ zRXW)?!#AE+C46U_5Co(Ms|8`q3OI`&H zOt-Ka(y<`NN;#_TakOvw@zO2m@fe!iOwC)a09-;K`RU<|TVl z5!p7>5997Qcy3q1n;gb;lZrn7tQZUcj5XY4O>v@JwvA1YJ;>PP9-{s7Mhy8*kLy%1 zrD_+roLraX4m?zD@o{TGEns9bIPuABgTVg2+g@KT5L5YW9KzhAnG+s`fCPHC8Vs}a z66Rt+8eE$yLJHSb$Lom`yw)vrwG`&Mx$m^+s8SGn?ulKIrSn?LcDDE37xCoZ4q=Nh z3*`?MJr|nmtsZm#;_;yaizi@oa0q$xKmV}rt-lsKv)ciJ1>+xD<3 z_yy^C!Zv%4t?knREeD-8KPZ9r)gEuYQ(LC^!Q+)P)G~nx;+r#>R9k`Ybs?YCpQ)2u z*(kD>zCOsIIIXyKF~JEw+lrsC8_bLh>?;66=MR|TZUwJc)gL*IvlMNHz;52sCJq66 z(EwquBq=oNm&B?6M3)a}qlGmvroCi8d`&MYj`fOXxWpC)^uFP?kP?(01P(_J$~icR zXZqc^eTPN1#C478(@W+I3;K13!dLI~dnK9Gl0jr?LTzZlO`nKoIek|7U`ajR7G*Hm z=qLY16&%&22J=>N|L@Hjic2*G&ttJvLLQGUJYSfn74$%#o@sVXGUR_%y-HbY=IpnI>C0 zS@MT@_WdBZt=>(MCd|nvOjNQlh6^@rA-bGt=3ALh(R?P^I1^X{E`c3XOg14*pf!>$ z?x&K4njZ)4kVj0N;#eOgK0WNpFK}l@_;C6>dS-tSE!mb@a=fWH(Pf$zIFPW(t>5JR zx=cA4|3~27EPd9xUDBC((iEsY?+f9A2g2w3A3_4@+-b1(cE+PVk7MqS2IMQEi%=co zt1KJQM$OtkzIYw-1egK4u`hAZ_t-7Aw25JE|2TLn7sGiwBTcl`#o|+Wk=tW`;tVAApIPxN1%rxd5hicP%_Jkr!!6= zMq9;VZM_oNwn_Us&r9q*e+Y4QM#w)VuaWG-FoHN_0UTS z$RzP4FADz3X?fiV_yZirnEYJ7ra4&XaQ#lOy)Rn8cQVVGLSG#44;86DbRO*l=p3Rk z1yTip>$=${{|{Sl{T1~W_Wi1$bl1?`9n#G(lz^0gbcfW?je;}`-6agIfP{p!bW2Eg z4IMLdp82lzJnP)|S?8zu2WIcjwXb))-uXJ%jZgW9%HJ$KKU8J^qkVGo=|Og7T);%_ z;DQ!SE8gmF(zB^CWu5>{3K)$@vVra_^rr(|JEvB?VwSkq$Gd1t-{F~$HV;UUMOrF_ zrsTQx;u}RuM4m9ATo3=fMH#K>)|!v2J0 zIWr$WBmD+tR_V_cqY9Za?fG1kX>dI+&_aNL?&reo(f$pEEmz_+AP-Sh{Py6OT|rQF zX-Mu{j}IRcikjwKlRx~dTme6u&;N<~d|sEEO@;E{gZHcs)j~WY^+JB)7 zyO7#vXw5`~FjX|4uKBWoSZQ2|^IVEW3CXh0gWk}OtPG|w^Yh=^$JM{@4vH_zRxCvq zIXI5?mz1l9uk|R{mMiojqd{i5c)7}o{S2ZG-!67dM|ZYGaGmr`{q)4&PR6S7)_YP| zol9E&_!Y9;QO;HKd(ER|2vv3gyv$kF-tYIF71vlF*dta4SLG~;RBahAwR8ye|(L6$ro>Ui@g= z(@$A;4+r+vWd&AkVOFyB`?|veeTl}dKXg|c)7BJOX&Tqwu70{65JF@Oz_#ze*^!$D zEooagGs6FE16IIb%?XuO3E>VDi_caMlQD@77z>hDCT%Ej0I{MIkEC-3E8gN!5$@b; zS5MEGa@Mg$yO6j%M2kp#R+igCIjbmiiuEmr>na&5Jr(C6hC?wwh*5LwaBFxe9cHs@ zs8%&YvkTC{=Z!S*LtKTo=#?XlZTI4oaD?NY32{? zHA~E(&*s442)Ve6F@{+06|W5Zw^S<{a;O`ZBFp$65|T2DpHJc?DM?z{UVATZplF@1 zEb_m9NU5ak5lk`*=oQMiM16f0X*q13`VkPz)3#SseKB!)#m*ba=z#4CAAfu^m=l0sqXsIc5#NzU-MUz>i6ynmyL>${lats!gcw)>NSKNk+u zIx$YE0gCkS7h94Q0K+DeILODh6gW}&FzJBX9sMce86XcqH*Nx+aP;=(4G^8b%#KtW zO6WWn#Tc_Stsx;r9*v}|Un8Z)fq8b24nBL-ByouhrhGMffv6bO&*$Jk|H12( zWABZHDuo5H>ltI#HTzP#0O3vZn?cd9kMDkjJU|bd^~?q{yUfzob>G_nY>iUm3+`s< zHzxSy{i4fXjIy_ieSmn53~WnJT>G2$v*MEUl@ny9kwmlYBC%^nZkj?zPyiEVP101O z??Zm@0KxA00Fu=+mOovAx`Q^2iyC|bGC$r(L_(mzFrf@Hlds3sHONa#3A*tMRB^+ zU85iM&ZaGlh$hJVBr;}Te1R=y1lds*Q7@wuDMwW$O`WGYjBv5iZ53}MTQodh{q7Td zLRpOiAw~nSHgV8Tk30}k-A4Ve3mh@&BW4$UyK85nIUJrMJDEA^)q9(KeHnXuCi*`PJsnc9+?>hSQmYgj3QAQs8#6W1cM!5ade(I8E;ayq_(QeRIt#ggY};(vOQ+3(iH>n( zXL^UDl+Uo%sX2n;kAw_o| z2~v%K&Ls^?lcJ!Dp$L9%Q>g`eD2|TbxF}+jI7x+RyyO1ZXutgZDIn}u;7~b$`PexP zzt9aFcg6BZyRUf~#je`KAqF-kC20Z}^1TlfrVw?P*!C?3d=*5vJTZ>rjJGux&o4V) zuN+XwyNjJfFBPH>xW%8-h7;J>_fm)Rd%Wq%QEn@mOxfCO`;0Gz^k9c7#ZwqMl*>=5 z2`wgrU4Hq$Sq!9-w)mVRKsli`V-s!_VrfOFa7;^e(9-;_iDgNJTB)Xy~CEMS)kS+ zLr(*4{8yM-nmJcrb0mIJUIFF9uHR>iOnb??mW#393jV^)8q$v-(>iU3IlpHG=}{bWdXCbe@pk*n!ks1cK>`c#4NFvAwcEDs_#=Nt)?ffWM&#{4Bl^g^ib}MkNy87nSW-c$RP#V}D~(H~QEXGbgi;?NmJSWPhkUE+&XB1T&%a}+ z3iwHX0O4~n9uby5I58;f!waSDM%o(mVTT zF9{$Tmxe79ry(-z>AK9{F{w<-zCT?){z+90+9{^w18f7Z@g6MjIZ9P*OGfq1zj}N&yo0xZ-kCNy4EdVr~Q#aMp$zE*teAo$8 zZ!2y6=7JF&d}d4_i#t^YqgaoYEm8Rf^lOC>Yvc7)#@G2VW68)dg0F@GmVOj(hG7wgb^_zR0_Joq_s>lLn+ zO_tDvSUmBV;cC<)k+x8<`HVRK)vcsjRzcHVX43Uiz-c?Q@cdSY#li)i${oAl z`^~7zm}nWBq#9rFlnC`GVM**y%pxZO-xQ1Hm>Lh&LMy_Q>WE%h8Yq-B|^?! z1*LOz ze;YT*3@Eh!Te;}Xm%-oBN(X6)LXwIvzZmGpJ?%t|r zP5(>WC4;4KA=kP%uI`mqo@;8RNaeeK>&pVaT4m=3A@iHw{B_vLJ&)qKIcBXN7g zU-&?y)0wGF-IIx)7YLoGSK|vwdmet(XHUaHy{+8iIHMtBy7JZ;bVh#;zSpGpt1LI^ zgUX1C!ttW5Dj!xO=(9TO%nj_G{H-%GoeS@YD%zBuA3NA>mE?WV0?qQ`uzmV#$s#`8 z<*BQVi|r)GRi%(X+o(@Z^>hS?n*#Qw_))Zku(#TlkMh1X7pyV=JwcxDrhAgQ!2j{B z4`S(x<<6gE3vmC6P4lnqJ+c%2e(m`wQ^2J@0@hs~*BzQ+n_6lJf6!HYtzmkts(W_E zu%Mjz+@xwTX-~U*&ROc@)ZpCuLm^3-;zKb<8aXDY_=m9umfCaF2PTSWBw%3bVuml! zME3`NVK`c_7`4;BF8lC95g-T%#2b!D0QRXtQmu`OlKDQsMc#72-v3q4qI#aX9x_?u zUoCu);w)Wxn9Asw=RP3l!%g}-`d!uEGBtS#gd#dDiw#NWyY(?5No`1wx$+fqT1}55 zX2bSD@*b_vew1xnxO71ip0rkUzKJRzOW@aL^@z11pYT&h00qewq7+YJjyxi&%Uqn* z?>{w+j38i}{C^Jq_TZ}T=X^hzXrnFw+7J|W`SICqdx8@N_ON!_M;}4p0{=Cwnc%Vv z#9H#g`mFED!BDS#YL~B~*jg~`_;U)-XsC@v))BFa9(35?8?OR2)IHb;RQTvJUyUEX z_Q=fHZ*?B&R)CCSq#HRKTDeWYpw5;;lJ~hD$?&&jr%donVPK5&ZpJ4v`fzyMyhz$> zC_RK<&wWNq$(x%co(lq4dnj}DBoE`ygxyxQ3jaWqnB0*RIqP$f!z*KQ8BadO&)0~9 zOhIOfi(s~CR{iOd)gFKPh=iU5xOqTuI{!< zw&nL7uADnfxF2hg+Ner#_k}Qj(wJQvJL7d^P5bp?eOvSH^*L*<0Yc*0fX9~nW-6nT zn9(&yDS9{P4nbrkPEIZi$r1*bCE1{$y`{2FU-8aLpYGu6Y$b!~0;pjocG^dnzTjS01=$+XP%O7;5VNHk^KgC_%bTOyC(AKd&r6=R+& zaidUmP1a{MmH$ML#|y)eiTOTt&ARDH;P*7=!nySdS$op1>boi;fZenxeQ$L%3b?vgzn}y}WEG)qossC9lBCC+{)n@4Y2N7H{?^sNSnL*wa#;cUtR@3N!G_4a zo7BEGjd!j&I_jy-S}an{Zl_(>?ExhCFyBo+IC0V*R%F^zZ{$%at#l_p;L6>d*PV3? z_*Q2AgSN$YGXMWZ+a6UvXWVlYb6E!)rD~3V!l{PWj}-He_3%tZuZP%KZpX3clg%im z6K)bR%o#+qM1=?$h@)orqEi{K{Oe9-onpI*D(vjdS9Y{45}N|BaUCJ!zZP@YB+^E$j`s+t&z3^OzHwoUc_A6v~yXd5_KYc2ORD>xzLO6aCrRRNG7sDE!-eEwUQ&Mf-BvLi`&?e(P zL*uZ_2dK;Sb3QClABQ;>{~cL6%YriL#}D(x1priUifiZ=eUVoJyUXgC1Qj3KH7IJ& znTd$y9r}H5c_$Wc8(&Ek3nu#nBjFqToytVhX z)@m*HHM5QI{0Z6g(o{zauRD{?YV|+Osl`p>=}Pld>E}?a-_9B{xFL##?WxpUQMy%R zk0#4LbRApvvIY9-j0q1-6#addfX-H?s}yuZ<}BCg;LE97$qd z|ARaUg&qeyU@l_$H)A_*`W~u(%1cx)5M519yng zQ`~kSDGOeT%IX5gJPb_L9xzLw8U0Q3bu04;UE(P_^IBUcjdRX>;uD6GLE zFGSP^|2$I2N)Lt~-LqzCi--NzZS)=D3Ls$?a(wx7dR#(}VjbaqDZP(1MBG(h$YJ#| z%YImEcE`$VReh%M^i&z7MiK`7Sq*^ha3;vGO4LveGEzP zY$2~C52$ggtsmf2bnxqG%^9LnXxF!4kB-dU zru@RV`<={9^S}^M-qK$KSy^BT zkB5+|9Q@vST&p>VIxaIZ>q)dPG3E{_g*`Gn7oS7pzcc( z)tjhr6SbtgL(?{4l$1I6b=lAzcsCG$W<{6##jkpL&5nMN3Plpa-@vcwfBYwIA>EHC( zSrjEQ}KDS8-)7q|`9C5CBJEi&U$K_I(}0V)1t7qPpnat-3e>y-er&A!}hJgEz} z%=Wb-ir0Ty33{r?Bck)?g~t5`vBc&OjIY%kWzVCAPzY*y9}(aK7yn5;=mobSXr= zyQh_hiN#RyUq``LPAluT9&rT6I-1HA!8bk~CazvLw-e8tYU0+KPIG^6xTq9`kt%BSfNdIDDpGQ+m?DxY%i8Aa%&5aBSWF zeSS_;n@PySuBohFTxfgNww-5#z4y|^rAkeijcAe$I|w^vJoo;M!tu*Vx-O5W)-@?f z*TrL^9pMS#I`&*b7$grlx${8Xn&P)!VUPPLqF@Bkk852F0ZwDGWTbDS6Ii#1aXFDa z$>o16!dq6A{;BktNX`kKFC?A9-0!Y7y)Qe;q(!cDtbOP%4`aX|W0zb4L^z0GJM0o`8<*vT8Wu3U`*w8`&HO5)L98ke>Mf~E+H%7Z0 zUS1*f=D2tk%rpn<7|wD@6UX&@fsHNB~^DzmFnJ_ zGNbyP{cxw#Xcs(sUIb=`b}cfEvA%aTH*XgFgjG-jHeJuO#-M8@9dEoSc}IEfA80$( zj1f z?642K0@J48cGv@Kjr#yzSvS?+mCeilix$pQXYTxuOJI-aC3d3ED%egO1W~11*$TQ| zSvzZ{MYcMmisOZgstOUuw>fDB+qnxckU)L4+EO%P$yBxRGN8jTtPI+vWf7Qdrz5KB z#MfeaX6HA7N(2yN012IbTn7U(O+C=&j*ciu)A?GP>$f{=782AktDIkkrC?$x3~|uQ z2=Hhr{>J!txh&?95}LJ_{0qyWYdzZfHRx7Uuk)O%lbIsI%>TTk7_}nCo#P}@J9$vw zbT3QddzRCA$94GIB83^jkNk5d5tPpJb^K)|D0u52;P#f}=WV}#F=b1frCACDabVPe7ufQEu36Jh z$K}cV9PVL47irLpagQ;o3Y=36CN9p6-fBx|0=2$CJ z&r8P@^uH*lCFMU8BD$o5u8lpeluO){k( z4Z|1*;f(0v4P?d0^p5)O{b_)ubqM3e$EW>-5LJZ9bg0+=Kz5qc7UHc7%^Q!qmYS$4GFP^Fnw|h! zsecG0n?vMz&NTI*YwcnW40hG>#~__AE@?-?Q9-bSPY=&Wd9OcH&m~oV>K%;}v}_nm zb{b+Zs^c1p<6i<>q8&3~4Y9N?G%W=A<*fALW+i7@+NN?Fn&TUcn)3?^CYT1n##;{d z_XA+#dE^eD%4Gj+je?V>)_c!2g#P0{)qaQGEh^^}hn%Pj*3cLq2LZcK6g1r5D;``p zudK6;GAC#mUV}{w)x(zC?yDujC6DA3yf1{~eS_4f>-T!sI$b+sKjTP*yl%qK)UTv! zHKQw{yKhIN^A7mTDnW^0kP_qNmtC&JfM>3kw<=E#+rEC!iDlwW6^(Wq$Cgj=bOa-z2(x7t?2kp{+@=G#!QEWK z^9moJxo`iZ(CPOaq!p=OZbOCD>ydg+bN{dANzhSmc*JqP{u)Xvm0Z@=*&m(HneT-@ z1WX?VvpQ0qnh*X)xfN{&Ih$o?oaYZ%yrh(VP-R74v|H1*S3Gz!y98y?WQEosK0JpjNP|)R3=PHXOq7w z!TGYR8R8(}FJY?Ch0lkI{qq0*e0zZ|8`oAT^EJpiCgC%Kh)(-&JNO$VJu$p}hvUzR zuTCn;^1Wr=(DO%E7v-Dl0%UrJ(y-XGv$C>M0l`{3R6$IRGr`bw#T|fj(O2wkJplwf zWoY>4xYB9F$Yd>zjjz8Iz6emsD)HB##?;2Vrqp0UL6piWAqM6`qwo2qD1ThpRSebs zimp3$EA<}jS>!kS3IOZDSA-3@M_$K$USxxgbyEryr#d#9MIfe-4JYoycT|DfC?9(? z$mt9;>^EKB%xftY@lmz9$t+d0=YxNra&=zkK}BVNJ5!|!SJG+SjGJFH_;NY-j_kS; z9f3SQV^tl>l53_$lXw8~eanZwh$YG18b<}J8?(sLe zWjqMcU#~vEbA8r)zLj?bHOm;!Y)eDaB^9yH|7k;>R2OKpu6(7>TtU}2$g6ozEKFNP z+~yiYE?x+Z`=)+ToD`xo9SuPVOQ`!wwL_)#p3Xl}IN6SMPgkxT=|^k4_r8q)rMzau zz6HsP7d%`%1%x7G>pByL?~}1avcQtcd)hR9mJE?ew6^xuT4C*;e#mR|p&xAn`0UP#x^9L6aXm{4$mBUy`y|sd~FzB%d*7SVP zTGAm^!XA~-Z^`PS&4)cd9-qEa!xR}391sj+ObdZv>RatEWPkcPDtgTe=@@h?NFZ%( zj9if-cNq~g3l5V)9C?hN7pvz83%GAbNhWpG+l{5C-7ReeR5Ey$1dq5ZwDtW8E0;`U zeK1}a(&5KAN45y5P(HqqA?rVFTX$8as=WDdS^Qh36ckS(PMG8K+vlUnPq#v&F)4dn z^i&YC_lqZ9e+;tlzt3tH`d|7Bh-wW;ad;9;L4Z!VhDL3L?EZpkd`vIL5pVraWxNyI zJ2f<|I`rjd{NM6^U|nE$-R0pNr(3VvuLHj!RR(Hkaj4j-%=7*P1Y7BYs8$*Kz{T(6 zUC)Nq^1J}8f&9UgB_#&$NnA5pG3ry@X&TXBxBJ1jaN~`5jmY!Ag$gFC{BTqRWA0A0 zyOhH2J#G_Su;&}vY2_c^2(rS@x1N+yv(zC|;@SZL*6`P6Gj7jDNw9Ywf$Eyn2hm& zN0`TZ15uT@lp|4_;hv>i9P@s}JcqF8BL822lH$i;0OS4xy+Kc~H=KBZJ+`IXt+SzL9!KpOZw|_8F*{ z@%o#LNau1w(8+m6He@|eAioJXVSFap0%9Kf_{)XaFe~f4=VMcF-VY4?o*#fh>fKL5 znukaqXK_H23%km%eok!luTX7;?_2f2;mug9$IWF$^TPDMTN+)Y{SzR8gp5$KBkT*E5As9rK8jQe& ztCOHw)kWcSUfnvHzNFAaXH`-cJy!lGTZTk(-#LX%v@xQOufY&`<{hNP9t@5se7}b${8clv*xmf-48zGNB{=sa{i~8z-dg^@X8|%I$ zAghQa=ULvVI>0r0gomCC^C)jq{(+#kTWmBmuc^(r(wBtb;+UW1?Sc@EcPY|zNf?A(kq?Jfm^$P#f&>?UZcRh9Lr zP>9H3p&QCEVVVLxwfu(J6?apw z$sDwAaM4o6wkaVf$ncx1wZiTa5bu&(nHRZT5BF<}QdYGFIx&Jx@S%c_BH5H8deG^N zsLY>}wbDqrsijLX45IVkoIDAu zZTc~M>ve%>wlqzg7s8NVI%{4*8LwqTOXC}R(X13n99MGiV&5&xbf zrYg(*BO&t}e(a4FRcgSZqmqAcfBjVz`q0Efqm@+4Mj)y@#}0eX`7}7H_fskX!Q)B5 zX$!0X_h*q1F>xC`+D)#ddg>MOalb>>%0Eu=Tt)3{9A@3}BMDuJG`%r%+%MN<*P+21 zOs)-8%i!|L`(vtF5JYe;YTor?4!5H^X=FpgQk4H4s+nTE_SS?5=?Z@Km<3j z3lZ=Bl76G>(#dwglD!d{aALSc=!#zIAKF!kVinojmv2#`fL8>*o7szGhoI`}>E@H8W4GN#3?IAGu+G;mJeX;L%He>8<{F{h{re zZB;K)c*L~H2iwvDJ;UQ!9vBbM%}wl7I(Ory8hdGk!dWdlo(-7|(to}+^ZRh_66>xp zs>5gbazNe`tn}u)wdl6xUpmS6qrQwkUKFlj1=dh$?+~3N2|JGmqNJ2UA-ju5g@g}s zId22JCF8M1f-de&oz*^3&Mu&Z%?D zclJY#;nsE$J@E1Ak^h`({pW7p>;rsDwQlMOk@KUy^z}wo|4j$OKLY2EXHuZ{a(2|Q z@9O6g+1?XI-)F0~V@7!Agji~IUzF8pG6#NW@A?vjFkV$HB&p`wa&aB;ZgscjP zZWf`FobVSi_P@T!UHELTP-m+R4};Me?{8y3i126&ICcR0;`+%A!Q+V8lTkH9M7%o+ zlv_xhV({q^Y^)tWF2R+?_S19x3+=3L4I@4Ep-a@iO$qKl)GI%j%~+Gv>utxpr$^Gh zej{pC1NN56uvp(}#~*xQ3u`V^5Y|Gis}T{^V0!d<=h5O%6}B^-g@l=caJR!_E!_vB zhl^X6z49G^I`g>OzH3{OXBqEdPR(41*T<5vm0^$vEhuRBRN4nR=@XR^Av*=iW&-a`7hM?^D4} z>6sr1CK@|k!$M~9^o*rGU*W(RhP9(}r2_ZdW=fg87aEV3m^jQN(TjCn9K2L!;pDy zLlCN@A#(9o_9X7;6T!G)Gez|jmX&(nxsh2}?KXUdyv~TH^svu`0Z+Hp^iyJNM>R60s0TmCSA&825Aa-(V#K#E zC?=2HNYHWwdb64b0b^$j*ENROcjCW?vB^=E!UeYluj0TB4%H9G#!2@Y=2x-l=V>nYicCdQmUg z{_7poVt%jk5Tx+#VbkmlB4bh9DzkY0I@iy9hwvGVQO}b28Kq;_-{{Eg(q+ zL_BQX6S2PRP`SY^tYVKVbV@X9Jyh|0rXsNofo(N%e{4*o4?}~A{c69zLh{(`mts*4 zIJ-l+y_VP{j7~-KJI}XR2Pv4t+k3b>GnB98iiM7QTTeS+i@iUsB4u1o6!VYIMBH>M zNfs~85POG(RTmD}1|M2AoSR~<06C)Pf+EdXLeJ}aRplZ?}z{9-zxoa$kP8hZQo?kFJ|`g z(<$~3J=R$kGshPx{#oU@0xRTa!{e1Hg5y$ZF#OshI3}_owU4c0)&_Eotm4)#|mI;^JS|rS{q`Dqu$UuCGF181r-Hj8yY^~fE^>Cju zY&Y$2d)6cK&L$;w_-__%T;e+iXs*2HGCp(a=z)Xu(h|z8ahT11d9h#??(wJUmfu~3 zk=>9b^LG4L0Cm=&Dob78Vz+vkRY1JA2JjovWg6Qey8-V~z(hc2?rk_0>2F*^_txat z|9z~dh7o*#YkO;$_%lpUaad|QSQdo6~iH9yt!B^NAIX>Mr5rlR_| zHEE?ILdOfd!5PX=u>N}q3Ux|d@*BjKW;1$@?tu*1u`0)aB6;;dmmJCtO8l}S&ga~w zd;^tV5YORrNE=9x-L3l803mK`Ytz3Z8WM8uqWMo!Wt}nNmc^m!l#NMCOP$U!6N!1H z_y-gU31L3_i9;#U3`U?^&R3y7Y&6@Gfw{264JUWo$}~tKe~q!;2@fYOMzlq^4e^SA z(<*DDs-PcTQ{{+57jnh;ljE)E55&_vqAC+?61&(aCGSV;|2*FLFh^?X4xUo12lh7g z346VI5eeLd+B=XbabRF49Z!5YeO~|-a12-^)m(O+^288*o|$`;zF2SC>Ra~n+jwSJSbl1ZVZBj~<)MmGA&Y6Ry?GUUIR_Yrg9ocw>!ycnm7bjVYIdU1$qv*SD=Zb-9!Q?e{W}%0EKtwz<#9-&BlYHWThx? z4a|HON6=D6*zKj=3!Sp|ATHL>&g{E1#A1KWqve>5!4%Fi{rps|ZZ&!So^pG5eEGKo zy*g6H3GO@v3uxH22eTMYXP~mGmS*t%O6zsAia2c#ytD(`3Y{Na(;bHeJ{1|L9uB~r zrOc%fzrch!bxTQWL9?nmPkygEil`3|Zgb^n$`vta%9*^_l`O;WN`zV}zcb%E!MJBQ^IWvn(+2peIg)YN|cV*DjsEGtZ@PTU})!hk=Q z8_S!EC8h)6w;(3tUL_y3o=f0@^SuiLB`p1yHucbJR$o0b>FupM*<0c-@N z7ke`YI*k&AM`ANgu5YKa;GHe-<+2PaiiUK*$||fYXz-h_Na45qZhYHo;<;?Lt!vid z)Y8Ga*tc|R-rDCLWl?-VACdE2kZOW4dD>~B)q5)<-lbs7XgeO@&G{;%v|?)zxotA3 z-avLL^v}r(;SYfV-fioN>hpgUSb_(olsm`hmlFM}{NPdFW>pktH?FiAMq7bGD8{Df zTwqUL+?7Wm_U`w~+@w$gmc=*NpE$Fkfg%u}=*BOjjFky{_s9xdZ4ap$x8&-7NJ4*z{W zj6qcO{$lx)q{}uVrJAQu1b=&fN56Tyy56$cN`C}|jl3REa;Gx*{(&>Am#^5VQfwg% zrl&h?td^^)Oda~Jr4z5+>U*c@>xH!i|A9in&j=iikBQ#{ug|%)g*`Rl*aT~;9Jo{M zbTt#MF>H(pyc5(KJX)l|G(nX59mcnk6C5&mQY|5!yO$c(u4mDFyQETEhPSE_VOVnwL%r zwT;!Ij!hAs>zDk^|I$Fo7Agb{4^vuDVSMY-v0u7g^mSTGY?qKE!km$eg!+Y+wPn#U zW?dk3*RAi5775tWKmr9C2Qe*5+!HNL;i_chcWlK1FJxrHJ$^j3I5>B?i$QJM)BuJrwHrM?$dMFo4T!n_=~iOW7Bh#5bN7;EoD!*?KX7 zZ^|u0oa%p{%rg+q5PMEHBm@dWAS_SGC8!3t3OD!$Q z)}77{vKD1S8Jg*~eKm&U3XY`Q8xtfZpXfO0f;Y8XRPjmD(vauoAUEov<>OEg`dB$+ z1NlF8T!zQ5lX6<*FU z*2xdReuc_zA7u%DH#Iqyc`ri1zAij^JKe726JPoCj?}(Y#B=YjFDeN!Lz2~Wsb+?a z8Lx+yPWQ1J)8-1KM=N;pkCT!v)vm<$%DcS@FI8OAVqa9oS$V~&>~P=vZoCfO!J$&i zPjCHQV@-*$sUF`(FOo)UQK36Xbp5Ci?=>kLe=$_74Lx9o*gOT&Z-qSH%QSyF(|o?c zOKSb&hYAaQg9D9b63(u!t4v{0_a4X1xICpb)RZH=i|ROQvXMJbZsNjJh@HWRgPmH9 z`DMpt;-2)RgkK)adc^t_Ah50XskRpbDuutGtgWb$M&_~4n^$$z55zsrh#9ZXcq5HC zES{2X5`SeHh*m3xWR!wURLG~_V3P}o?r#9wby8g3e@@dc4;`?Lmo;k)Y-ua%-51f# zinRMHF+@jT{9YpGRP;IMX#rNyN(>sZ-V@n(707p}ktdMmO_!-q6@PehKWFwJ+4j2& zfdt6n!6|tN*p1g!k%Y01pmX>6ZWEd*k3WHwlBaW37;be4{=UwLk( zFp?UB98z@|JR?lRMit#Q&}Cta+NsgQ`4uL)Us(|NB+T7W>&9*NwTJc$j=MC+vN#__ z;xBSUEs91kByA3Ktc>(6U zNJyB5}k6u1mZB@t|GMKHsojj~(lXY;%|kM#y3SznOR5sjg$p)Bo?G4e%;l@$5l*Bvq(fi>ld^JoT2J292EL!+sl< z(!?8ZH~+?mW95fKvuBoVl^o#D%n|Y&AAFq-|hK9i!TCO#UbwQ2~j57-(a_m{x`tStq7t?F^c`Z@w8*nv2MjR#uW- zl4TX{J?rC08vUH4Lw<;#RM%A%bu+D`VivVQewRn|kpB5|sZ?p+hC!PXyEB6``8Clk zK!<;kz_o#UBVe*dLVqj$z*y;i0P!kGHYfHW_$GiqFfdRCPE*=$`#F`eG--wzaTpdg7{`c_O)cEOIh^)(0+iY}h8J#EfWV!SE z(hee|5UpU6meucvSBAH}iZlliA`6Iq$Z{a4eOiJKkzy3@TENKM1R_+(j|i78RU-b;d+(iLy_4qK4K+V2wWxsR3jQ_O5Mn`5_yp8YB_d9L~g@ zjBahkxY)_L9jMyl0RE$-da#O8SJXywaQM;9|0{|AH#x;nzvRVIj#U4hg ze0XCi!~LwNCsD;$cskS$upw3?|fUj_Lkx8!(Da71Df^qA9r#?+u^RQ6y8I~1^cTywK0~?{N05VsN@`vmwyS;h)F5#4Dz0k9W8Sj1nark^CB=}> zwzJOL+=wU$vwT+IasGDU3RAXkY$HYkUOoV%k?A7^zpQAeI-zQK?BY-Oofvpryk^8a ze&*yUQF|vA zP5&<0_QuwC*Kax3kzaAnHDwdmSF=mM*26V56V^K@EHb(w+3qPT#07C;FSvc z8Er=KEWCWqWy>+CK1Py=zoxz1gm5S(V-UH7I(M2ail1S2S$luC>ToD9-jZPM2uD2; zUMI_~Sk>>hwZ2B6NSdmODS5xbX#&uC_`d-dv(`ZL*q^lCJFG7!7XET$ADN%T1vn9l zX1|w!L=v)f$5GjK9vAMWwn_ z9HkdelfJ6phM}=;PMr}peVSQ~j#+z!(ZiH3V^Lle;R8qFkd_u;Wd5sL79$X*(qaA16iESc{>-Ns$oSkK#zzg$pJ>3DXbfv1lxeaY|tSBlAwVrMP~3SskqztCgA-y zzRzHX&`>_d%|7bIX$*wt4utOJ4oqthOyS55u{WbFP;cC16~o;8>i*&~oVF5T46Inc zJtSF+TrkBzw=q!`6s&I~5fPNP-E(uYjxxodrv)(j_3}<1jj&q8#39S*-q9F4C$a}0 z^5?@kqvO8GJ=<-ZXH}6(M8vrgZvB7ZN*=_-?9 zm=bYwrrHFWEYKZ&fgkAee7}9&ZF}p-_iwtUriHI*I9Q8FSk&TYlS(y8TepT#@lN=4 z17qffJ+HPSy{a;s_10Ey10(7aNKtP52~(NX=?Tgy2GDtP-g8+^+GWiP?@TjCUIvh| zufK*jw0CugwLi_8wR@Q-gg(nG_fBKfg=jS{+R=6$de-MKi&p@EYAM_^S`eq=&}Eh+Wo*yPZd%LtRi=c&iuW-lP_bv|qDr6WZW=(aPhk`t<^ z_fb7J4>kQhhuPYd*oSD~G2>wBw~WuyhFy&k_vgBXnWa$qRMI34lZvn3ZRT*1>IxGJ z>1>t|KaIA;Dk9DDAjH=*!a*IyXAE*-IDlvS>TruP*9o=SQy3ouy}j zN!b~@w!AvOyR($ck&JCDvC?B1(vGwzkQ3qs*~jF*U6=ik5~E*rXL%RBLPTqgH01LE zFL=3AzFPo;zDi=4a+odHa@-HO=uMZfo6?mcxe&3HxMsQDSK}?3nL?#EdI`Y9mR7UI zMt;%8fdM%k#avjTnL`Tyt9;A*>@Upl{ZBq~tDL(__Flst{R2M4-w*e7F}=nV;jgZ5 zqLxq$eXa@$PtrEW{VzBBAt5(Uf}Y9PXMSFsSZbWway`nGWQ%VH@O-BZ2?+u%*<;L0=aWPx0De+7~w~?Vye%(1i_arq&YyE;KeKQo}dbW_B(=WBcfN|9`9}CQ;gE* zDFj0egV88Jx=y8v8Nv&3UQTGD)B1U!+$;fDH1eC-_^slYL>lemw}8y-o9PS-k-lpiOaCJrm)=Hazt~FJlh`A&7xDK&!%RIeg|&I zI|)}}M237h)_e2lL%l3-d0-T*Hrqz4%SR~czN~8OOm9(PKxvXRM9AYDED87dN^`{T zogLO1OhLtt&>zj;unR`qC!|RaKM!_!bfue{Od&x?x?RCTFF_*ljMpS*Qmo$zd6bTV zT0SGaQtb6F15tlR*3lVx8r)!`aQel(oe;22ooNLQe8WUC+UUu!N^HCTkze^6ADj>Z zyEDWmd|Q>xUZKz&u+U{oBc@^5+G7d+5t`9Z z7*duIYq01Wx3m2@p02?K0jyVHJ~?qOYRFvp`3Uw=_X#cxDq^3YDG{Nm^l{DS9x_$d zkqjg`W01EuRjWHtyQ+i~m;Y4IT6|a`1IG|diPrbN;T%n1hQY;-mx*v6Lms z$@v`A=gu__gwno3GpqzYQ)6G~GWNN4=gF~n^oT8IEVVBUx0>^37j+Y^!)>`RU8i>} zoF;$U5FUNxS*r9FfZ5d=VWO8{n-t;jWDs>59kdNBNW??)5 z=iH(dfg%q}0PlpK9nxt?RgLMkO^O+ltH99fgD4o>bLpniG2c&SGb1?>Br@(vWX6(h zIQr_Bu#4K2D;ff-+1J5?Ik!5y4*ST{UNuwAtoP4o3NwE1s<8w+1@p zOCL4{QXHoeabKm{VtQ+nQf0rL$n+=Pe7}qyj+a1_3Si54b&lIVUt=WV ztkRvhax^95DAa^eJhnYE>i^E2qyL zCHbh>XcEeTSXq{6H!2I(s>8|TUt5MNS>}|bI8u!^ z<;kVEj(fG6jZsW(Ntp0zam%7;RJ3`4Ec|9e6Cqpkg{0C>t*_*LHQv#A{FYE z<02yK-R+8?fUWn1`?+;F$lq;Cje=ci;Lew9DydrNk9=>0fTnc{1}u)m?} zKGzhuIF6c{cEy{B>ekCZstc_@9NNIFWIS&K{&;hUH!vcmEX@^2h<&rY`4L@OXiSrI z4A#k8p3F}}!=9NKni?z<@Rowy%Hp-_Fw@tddG0{nHW%xxyf@=DCpP6(hj1SC2|v%+ zT{6zl)lc4ZOo7Qr(Aac}II(If0y6Gsra0oK7b+_4Wp1vxG;mzi=)=Tm9&sdEv5b~R zTn7yCN|DQsm0=Xv^U-KTW+o1fueaXSdP${h@KhI&tP?UR_XTgxK5E(ovBDIFubrT1ccfc5bVn{tL7Kp2aJXJD9J7k_v1U z1dGX&U86g;f~DX&{p<)ku`ZpI1JSwB9~ta@SrVG>;(fXD>!=F*AL#}u`LDBL4n)U8vYA(_t!D5+8pDU#j%I!h__NU&^vOsRSPvEypRZFhx zltp(vmkT5Z^2oMkCxCkA4aM44&5QP~p>&P%_j;$=Pv%^V|3{toFOeQr*rRwmiATO# zCtf2&^)&vx5wlp^>R@Owxwl)M0Q}X_lkq7rX@ZfAsp4|$qkdWtrW;L@ro&1&O;&d& zS)cFS97lBdd9BuWXNk`^kk1z`>LEJSpT;>s!=4xW&VkZC*ob@2w?%TP*o-ej^S_bg zU@!{a3aM;UjcpDl$a69dzSvi}xqyb^65ebVv4ju8I8Jv}iB62NLxuSDA(&e4bib;Q zuBlI^T1g{`@jokhLj!vqrAnb?&Hem;9YaOuL42#u`h`%l*9kCaK^e#7+ zC^%NcRh~=Xe*6$UHKj(}FR}1TTS3W|KSOPh4cdZJ@HDwznpb_@Z0|WlCwF9PoRyK< zl|7$sB=7r{d?;~#ox4v0(GVs0R*ca;(n*wRTY;WrO#*}o&Z1Z4{_^BSi=9lMu>`j2 ztuzLC7&#fp&w94ezP9D+gB;^yWK}BNW*02M?=In6-uycmP38x=rxe&;bNEXidJ*S7 zFKmbhuWQTSghg7oN2v#6y^N&P_gTF}k(QxN_!c>fWbL9z%f59wI2;=O9fG*#Ar>7V ziN!RT6zuY}5g-TdPNo zJ5bySLRhiIjs&OO^5;bO1l%W-pKhEc_J+2bwRHa(X4S#B8Xn8>x1pVi8yP7wR#cl7 zuz-QkYjc1l2S~uBRJ~?XW2sX->1`=r0d<$Y zge{%+O{f=XrFkDc4Qr4f7ql^M3newsNfhB z&ap--hem(nvndpnplGY{RDQ!19q3UMy@5UGW#{eBVZB5KCdd*1fz0ZU_wV0Y*?%i% zC8NIy9Ck7R1;RuUb^Ux@VeALVPRFueSTAXjm#YKUoemcX1d{yyNx3C*YT*_F2DrwC znv?&&WHRg!L}^e|62sVIttO>3LKpflB_DzyJ4tYC-uPyT{_YDaqe? z_rHFrzyA_&?X3sa>yOQ+dQ1YUe=G0)+066LPor-DezX34UDTiS=KuQXr4TaV|L=S3 zwbQAdk@{cm>F-;fNcNi@5}F!_9{+p$Kv1v9WXO3%6H!2id! z84UpRIR!ACnKSg|Mb->=Kx zw(H-WXMev@ndiXbjQJ08v;W`L=F91CyuRI{>5~7qefqZs-!2-9*ZbP3=73K?pzYmm z)4+fDYAxr*eynl`6?cW z$E$oNF+BQyron-^#L)Y@n*!^(#`ucfek5|AmjIqkkU}THzviV-U36PhBoc5b=d_%c zv7D;Z-{OxU6Jo6DJa65bZIQ37twq&0v?zN&dRhQKm0#OfhkUX~m?@sde8^vH^7V3w zRLH1%!*VdmxFV#NiB#)#hVQ-_q-=6MpETO$X~m%Xc`3C&rzzhugRTBklDUK>YP7mJ_A46*mdWePBXswKA)g zYqMkTxYIA63jXnQC!!(_B!%bI2mHz30Ob|7RCfa+N8#B?w|`NPKCVLOx6RAthNmI1>;tA1kH?PP^+koQETnl8WVPNJ2*{ZQtR zFtapnLSBD#>%!iAjd85_$);4>Rf1>(2rWY^)Y& zGINSXnWk)GJOkv@V*3@l>tegH)__KbPJiPZlK-&1OFss(};cJ~k>WoLs z&-AW={Rj)$07L!Sk9j}es`8|vA53YpXKXl!e^$7=$uI=ZMhVPs=JgN9kw~4&YHD~b zOtWr6BW%4HnA0Z{e6NSNRNE$rx~-w-LhK*lxo$K5N~Z^tIka;J6!y3uvN`>?4^-tfNppzh)afpkUu5BcQgjs3Z%7`;P+ zgM}t7;0b`4B}A90m&7}H%j&tGPNU4!9scY{-ybxZdfTki@#&q$-(L^)fe_*?6MW8oqKl!@f1Dq)IOerz>slnna=O_%va9wPCvyo8$Aq zZ!y_i$<*n1@tEjD+cNrz%Grw`Qkr1ae3+lh;ZYp5YJr1EiAtR*t{_SZXk`CJ&XYerxKM8k2rG8E}uK&zR0v%QQ3>%Eq+(O zZs?kOKyyuPGg49EhHMngh8f&{k7s_PG2dEtiC*4K&k+3?h!Z~|>X-*^bzID6?V@e| z%wi(@wvPO1r$MVxhKH@<@HQ_I6D0g<9ArWY zwT!~=OJ>pEiDuQa0WXVf@gRJ?^fhZTd z1vU^`X`L+&4vtxg!t9DqvTBlBn01FV_DDxVGFr)`qdjfNXzBk%8>tSx6@9arc*_H5_ z3LWl5s0WO;LZIGaC!+N@=u*&W60D00NMKJ0Ud6gDd9yAl?vy1AaA_H4+47;13c9`R zyj*=w9~3hn<`aL$tnq`wygxDDN1OI6VFn}WeP8If_xTJg9xqC7s>)YnJ9h0Se4^fh z-2|Q}xbaqu_v>NUZ%S?9C$(FL%KxRlZE zWYtB+2JyxAn81`*6fxKQy(9C_w3#XiCyR#kiL!iLF6fnpmOtk}ohUkwIuG?%znCtqjk?uft;UM`E?-} zTZ~b}!QqhxndE2!OD?H@>7A zdu4-m5!SsagDGPZlAhaI4T}@Too-s~IL?)64SVqfYQo3gpAKc51&~+3d=}ZKH2uC zt8Wp`x=*m-{SRA%q-STA12LV>bOTQPm3Ps&!K4_omPt`$7e5dvcP{#{y%$PRH=q#E z)I~~v4mp#rr-}dVY8**{RKvjcL8_va+AilCJcrXQ6pP9HO7$`v#YAZvy};+gO|TE& zyMt=k>HS4CQsD`)N)2QKBQ_nUaHd()zFhaJ@!Neu_s<#+1`bOqHX7^XvtL5UJYG92 zFeDB7>^Dq-;^a9UU@Y5`i&JPaHiq2G?Auk?y-#b{`7k8Qw5nV(_Q$~+z(8Dq4|p$W zImzrby3ZQB|A0)tAs&kY09`v@SG8p|{1s0S2qLT#1;0g}1pre(T}z?a&rBkE*Sm0i zKI6a~Wln=U(3NxynR6NCYr!yV4YC$hR&C;jY!fhp{6_=c&Y6ikDcOPn2ud|*&J|2x z=)=%pIWfR98eP2fId~=VD?WF4;%$E(n^~~$17wf|&RxwvY@Ec1ck;^U`=U3J34k?PWM;%e zVjyvO{RJ)Y4Pv@&A3|<7!!Di{g@+sv7sj`kftTbx8xnrVz4aA#uDQLAIRtmz9zCP< z;1>ySyZ?Tt)v~pIJ5X46|Hg|9+?K86bMT(*!l~LcBPaqNvK1o*bMU83&+^>N0@{A9 zM<=vmaNsB~vrj26TV3XxkAX*N8dT1HwxV}(H34c^lw7cq;Fr3;Dp4!4EcIVxG2?)m z4ri~Ok5$Y`{@kpcDE;=?`CwjlZV2_*`6b8R#Qb1=i_8N7XNW^PRmMM(6u%Q<0I?76 zLape{{)mWJL88I&kFXlbsHhg+r7#UC%t$BGQaNd-bbOXrbkEorhn0%q%#w_BzkA(v z)EXtQ-t};sy_qgdM;+{xLZ;8IpSDcy@Z^OG+Q_Z%!%_6@?Fvc0W>mZC_;>463~Abs zDFV~qo8{IS!PIY;Yi0k=F?Q|ko61!Oxk@Ud7{m@98MF0*xO88+IgrB*fN9?jFoo&A z)vaq6@I3U1^B@`&eU7f&D-DbAQD*&!BRW(+>|L}_R&KMg*?xZ zY0j8=miB-yS@#&q;Hr)Tof6Wx7s6T}GT8nBIDq-={txV}@4wc*;Q8YsFFDp{^}7q8 zQE^m_(ss@N>2n}^;r1t`4`{NUYl7wmMdUYa)>On{ZVzzR!G6Xi5i>vcV_PjwE4+qkr>}iy9{GR8Zq$kh!u&FymE|!7E{MKI4-oH%{}sv|(KiBlfNf-YJ})rr&~%=F2VA`~+iaTO45!mLw(G z>t>)=ucmmr*x#cak0~=OHxJoaIg^*I)JegC+hMRp*G=IhM)<}u5;2B9Tv6Ax?S~_N zW!!@2&^mJzqi2}ZloWQEib;g$%y||YPV7D~hOsw!`9nl=2nNE{`l6k6YlDwIg`G6F6 z_s<6b@i%kvh*0;_A1|!k2P#pC$vH-GxgsC>q#d+5?!l*m7I0(At~KkXMI3`HtL$hG zs<~=m;xoLTY-wf7e3^bPS<70Olo`Y14OZpSt;Xg~i8x68JO?MVpppd6XAvinDFB|N zngHa!v?@MJ3i_@cQnlWvE7JbBjDe>@a;QA!zeItzm0m4r&(EvnqSF&3M!ER!m%QOAgVmc&qom&K zKITCiOc*VVHZ@GbhW51$0Qy&FIg1)Ii+Q7Mx>hZ)WHES;uQ&HdiELRi`o@y4LqtO6 zV)?u3{fFCC76QE6Ya}(3s~u+d#saUoa;cVNGqapY&xb%9KS@V&J(=O2dH0jdQ854gV&yV4)p5BsGO5jy&jj@Bp z+Ho0w+Ew1A2TX}{cgPCicC7J=?Q^^GFD6~K=sMC>uJy-u5@bCfq z{He+Rk1OAv`aO!%?o1GwL5aC>%A_XdueW85{q~_ux2ckI6j=*Qp6f@##V^i2QKBzE zrvF@9tez{|9j>WTkm^gM@TbPTdfSpRMT%={&Q8X@a`INXiZwzJi?2UZo7h(xrMapO7wl;}q&P z9V%+ewVFmT5_h=Kd3buVGgw3sR_d3Pj+g1{hwZ((ItOVro1gXj-iaQ)bx=%U*6rJ1 zy5ESgiGT3k5#Jtfw9sR0^@J%{;8J`cV4kCByP%7y9MW)4=O7q3d0SwKXF)u`XYdwm zIW=$>8Pc>=V-zBFHxz$$0)w(yORKPc76tLzeRh0_k`j|%RS*w#U2-n^naL&JXD%S= zbkK)RvO%ZuS`~F1s|S3uJvk!+#8q~FIZuU^9gSSMGQIj_>0QU zO-nKF$Ff$qFWh22=yFc+Gh%8u&I-}wTWr7J+iZ^7i}_>g|BDF=2e?2Nl0S17JuKw% z@lZA@KeYxTM)85zpMb)2R*`sRqCuXZDb%Y?qWjIa+FL!ar||joVL%8$PURO>sK`S~ z&JUOs6UuWoG<%HWD9Vgh&kLIp!>&%zUb@;EVhvYO>WR>w)J=BN+&1%DROhkFEJb|6 zLbAKmZV*X@gW>EBkAcdCHofeRp|iHWH@fZ){@g>9E4G7S<30}on1~h=--(4}Y&K5@ zLnHUbE46isxLl8C^XF>rk6}iEKBN9$lSCd4wZ!FdhK1dx-V#kW8MQyc?uqq8-+7v! z@92Ogj_la^aFk`GSNWcKv)uHI(I(RO3C>&+V{*(?fA0!)e}T?~9Q=gbplVnr?XuOX zs-0JOu-7(;S1EyUjD|o+_7oR_Yege;UGO29|I4^4QbP60(aDH(-ok2x=UKcqV}jvVudBp7d(09< zUmu`Z-}Tfx@Ci0wd{6Z2Ps9BAR~9*8boXoI_gkgbV}()j%GC}VjN6mU$uZfD#PS5> zO*Q`^l0QcPz!z&M^b@_sAF*82$?|Zq1ws{r%Kmlz3r#CQ?&tY#F@ZuH=yNVub;P^f z*&iETXq6XZ!U)M%2}K`k>wALH6SymMZ>Y?iBlYTH&`kR!62(?MR42(5@}$r~VTyrH zy0oCztlB${y4SVe+2X#1V1Qf@4??lEo@%vN9C>Zdz(~J8PGkFRg@g$H6g3b~|FG!V zMXhD2ev~|@Yn&z3?+u60JM439OF}pKuykXQ{7RFU}9i)yK2 z{31%LL+X2#Pg{kkk0p8yO63q`ZU`pRt!&^SWVel?7(BL%ui|l~Skl2CKOHTLMaKpc zDnZ*_#e4hKF{JiCd%?X~w=;?mqxoz*uaePJ8lHfcHkdTchxU39Sk~oy)U$k&nGMP4 zgHyag3E4a!c`*|k|IT;6MtlPVX;Oq<(?8khA!WqSX4Fl)Q!`m4LDj6-)F=|3WP!ux zg^jMW-Mi+7__o8Y2fuRNHl@mz^K>uBB9x^~p;WVk5x|6Y8ltW7JwUrqO~k&M?Ay>0 z<4K8_x^}5*T6SeEq2DGp>#A|QcZ0U~{gS57nl{>NtohuTFw69|1*3X{9tCE~8cVn> zevSVnlR2sRChIl_Xsd{mj3DTzRgSaj*eP8ZZBbkF8qDOtDUm>%8Uq`X>)+)|oiM+p zx(7tS&+#4;BzbaMPX;6B(7*ESLc^nL4|F{`KaJT5^K&4?DXnZ@Rfe8`l9Ek@<$KMjKuq$oG3E!zQhA!Y{C8)md?VfL}=yAu_c1 zFO8em{q6#i^}-(ZAX`D&c-!e*oqOcr!jBVbMpb{<#aViF*p0lt3%(zHl^@F=}Bu%)

    * 第三方通过调用微信API,将数据写入到setdynamicdata这个API。每个Post数据包不超过5K,若数据过多可开多进(线)程并发导入数据(例如:数据量为十万量级可以开50个线程并行导数据)。
    * 文档地址:https://wsad.weixin.qq.com/wsad/zh_CN/htmledition/widget-docs-v3/html/custom/quickstart/implement/import/index.html
@@ -58,21 +55,23 @@ public interface WxMaService extends WxService {
    * 
* * @param lifespan 数据有效时间,秒为单位,一般为86400,一天一次导入的频率 - * @param type 用于标识数据所属的服务类目 - * @param scene 1代表用于搜索的数据 - * @param data 推送到微信后台的数据列表,该数据被微信用于流量分配,注意该字段为string类型而不是object + * @param type 用于标识数据所属的服务类目 + * @param scene 1代表用于搜索的数据 + * @param data 推送到微信后台的数据列表,该数据被微信用于流量分配,注意该字段为string类型而不是object * @throws WxErrorException . */ void setDynamicData(int lifespan, String type, int scene, String data) throws WxErrorException; /** + * + * *
    * 验证消息的确来自微信服务器.
    * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN
    * 
* * @param timestamp the timestamp - * @param nonce the nonce + * @param nonce the nonce * @param signature the signature * @return the boolean */ @@ -88,6 +87,8 @@ public interface WxMaService extends WxService { String getAccessToken() throws WxErrorException; /** + * + * *
    * 获取access_token,本方法线程安全.
    * 且在多线程同时刷新时只刷新一次,避免超出2000次/日的调用次数上限
@@ -106,6 +107,8 @@ public interface WxMaService extends WxService {
   String getAccessToken(boolean forceRefresh) throws WxErrorException;
 
   /**
+   *
+   *
    * 
    * 用户支付完成后,获取该用户的 UnionId,无需用户授权。本接口支持第三方平台代理查询。
    *
@@ -114,33 +117,45 @@ public interface WxMaService extends WxService {
    * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/getPaidUnionId.html
    * 
* - * @param openid 必填 支付用户唯一标识 + * @param openid 必填 支付用户唯一标识 * @param transactionId 非必填 微信支付订单号 - * @param mchId 非必填 微信支付分配的商户号,和商户订单号配合使用 - * @param outTradeNo 非必填 微信支付商户订单号,和商户号配合使用 + * @param mchId 非必填 微信支付分配的商户号,和商户订单号配合使用 + * @param outTradeNo 非必填 微信支付商户订单号,和商户号配合使用 * @return UnionId. paid union id * @throws WxErrorException . */ - String getPaidUnionId(String openid, String transactionId, String mchId, String outTradeNo) throws WxErrorException; + String getPaidUnionId(String openid, String transactionId, String mchId, String outTradeNo) + throws WxErrorException; /** + * + * *
    * Service没有实现某个API的时候,可以用这个,
    * 比{@link #get}和{@link #post}方法更灵活,可以自己构造RequestExecutor用来处理不同的参数和不同的返回类型。
    * 可以参考,{@link MediaUploadRequestExecutor}的实现方法
    * 
* - * @param . - * @param . + * @param . + * @param . * @param executor 执行器 - * @param uri 接口请求地址 - * @param data 参数或请求数据 + * @param uri 接口请求地址 + * @param data 参数或请求数据 * @return . t * @throws WxErrorException the wx error exception */ T execute(RequestExecutor executor, String uri, E data) throws WxErrorException; + WxMaApiResponse execute( + ApiSignaturePostRequestExecutor executor, + String uri, + Map headers, + String data) + throws WxErrorException; + /** + * + * *
    * 设置当微信系统响应系统繁忙时,要等待多少 retrySleepMillis(ms) * 2^(重试次数 - 1) 再发起重试.
    * 默认:1000ms
@@ -151,6 +166,8 @@ public interface WxMaService extends WxService {
   void setRetrySleepMillis(int retrySleepMillis);
 
   /**
+   *
+   *
    * 
    * 设置当微信系统响应系统繁忙时,最大重试次数.
    * 默认:5次
@@ -177,7 +194,7 @@ public interface WxMaService extends WxService {
   /**
    * Map里 加入新的 {@link WxMaConfig},适用于动态添加新的微信公众号配置.
    *
-   * @param miniappId     小程序标识
+   * @param miniappId 小程序标识
    * @param configStorage 新的微信配置
    */
   void addConfig(String miniappId, WxMaConfig configStorage);
@@ -190,8 +207,8 @@ public interface WxMaService extends WxService {
   void removeConfig(String miniappId);
 
   /**
-   * 注入多个 {@link WxMaConfig} 的实现. 并为每个 {@link WxMaConfig} 赋予不同的 {@link String mpId} 值
-   * 随机采用一个{@link String mpId}进行Http初始化操作
+   * 注入多个 {@link WxMaConfig} 的实现. 并为每个 {@link WxMaConfig} 赋予不同的 {@link String mpId} 值 随机采用一个{@link
+   * String mpId}进行Http初始化操作
    *
    * @param configs WxMaConfig map
    */
@@ -200,7 +217,7 @@ public interface WxMaService extends WxService {
   /**
    * 注入多个 {@link WxMaConfig} 的实现. 并为每个 {@link WxMaConfig} 赋予不同的 {@link String label} 值
    *
-   * @param configs          WxMaConfig map
+   * @param configs WxMaConfig map
    * @param defaultMiniappId 设置一个{@link WxMaConfig} 所对应的{@link String defaultMiniappId}进行Http初始化
    */
   void setMultiConfigs(Map configs, String defaultMiniappId);
@@ -328,9 +345,7 @@ public interface WxMaService extends WxService {
    */
   WxMaPluginService getPluginService();
 
-  /**
-   * 初始化http请求对象.
-   */
+  /** 初始化http请求对象. */
   void initHttp();
 
   /**
@@ -403,7 +418,6 @@ public interface WxMaService extends WxService {
    */
   WxMaShopAfterSaleService getShopAfterSaleService();
 
-
   /**
    * 返回小程序交易组件-物流服务接口
    *
@@ -411,7 +425,6 @@ public interface WxMaService extends WxService {
    */
   WxMaShopDeliveryService getShopDeliveryService();
 
-
   /**
    * 返回小程序交易组件-订单服务接口
    *
@@ -544,18 +557,21 @@ public interface WxMaService extends WxService {
    * @return getWxMaOpenApiService
    */
   WxMaOpenApiService getWxMaOpenApiService();
+
   /**
    * 小程序短剧管理
    *
    * @return getWxMaVodService
    */
   WxMaVodService getWxMaVodService();
+
   /**
    * 小程序虚拟支付
    *
    * @return getWxMaXPayService
    */
   WxMaXPayService getWxMaXPayService();
+
   WxMaExpressDeliveryReturnService getWxMaExpressDeliveryReturnService();
 
   /**
@@ -564,4 +580,14 @@ public interface WxMaService extends WxService {
    * @return WxMaPromotionService
    */
   WxMaPromotionService getWxMaPromotionService();
+
+  String postWithSignature(String url, Object obj) throws WxErrorException;
+
+  String postWithSignature(String url, JsonObject jsonObject) throws WxErrorException;
+
+  /**
+   * 微信物流服务 -- 同城配送
+   * https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/express/business/intracity_service.html
+   */
+  WxMaIntracityService getIntracityService();
 }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
index 6b67b3c28d..cb537b9297 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
@@ -1,16 +1,35 @@
 package cn.binarywang.wx.miniapp.api.impl;
 
 import cn.binarywang.wx.miniapp.api.*;
+import cn.binarywang.wx.miniapp.bean.WxMaApiResponse;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.config.WxMaConfig;
+import cn.binarywang.wx.miniapp.executor.ApiSignaturePostRequestExecutor;
 import cn.binarywang.wx.miniapp.util.WxMaConfigHolder;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
+import com.google.gson.FieldNamingPolicy;
 import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 import com.google.gson.JsonObject;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyFactory;
+import java.security.SecureRandom;
+import java.security.Signature;
+import java.security.interfaces.RSAPrivateKey;
+import java.security.spec.MGF1ParameterSpec;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.PSSParameterSpec;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
 import java.util.function.Function;
+import javax.crypto.Cipher;
+import javax.crypto.spec.GCMParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.api.WxConsts;
 import me.chanjar.weixin.common.bean.CommonUploadParam;
@@ -25,26 +44,65 @@
 import me.chanjar.weixin.common.service.WxOcrService;
 import me.chanjar.weixin.common.util.DataUtils;
 import me.chanjar.weixin.common.util.crypto.SHA1;
-import me.chanjar.weixin.common.util.http.RequestExecutor;
-import me.chanjar.weixin.common.util.http.RequestHttp;
-import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor;
-import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor;
+import me.chanjar.weixin.common.util.http.*;
 import me.chanjar.weixin.common.util.json.GsonParser;
 import me.chanjar.weixin.common.util.json.WxGsonBuilder;
 import org.apache.commons.lang3.StringUtils;
 
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Lock;
-
 /**
  * @author Binary Wang
  * @see #doGetAccessTokenRequest
  */
 @Slf4j
 public abstract class BaseWxMaServiceImpl implements WxMaService, RequestHttp {
+  /**
+   * 开启API签名验证后需要API签名的接口,根据 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/
+   * 整理,uri包含下这些字符串且配置了api signature aes ras key 自动用签名接口
+   */
+  protected static final String[] urlPathSupportApiSignature =
+      new String[] {
+        "cgi-bin/clear_quota",
+        "cgi-bin/openapi/quota/get",
+        "cgi-bin/openapi/rid/get",
+        "wxa/getpluginopenpid",
+        "wxa/business/checkencryptedmsg",
+        "wxa/business/getuserencryptkey",
+        "wxa/business/getuserphonenumber",
+        "wxa/getwxacode",
+        "wxa/getwxacodeunlimit",
+        "cgi-bin/wxaapp/createwxaqrcode",
+        "cgi-bin/message/custom/send",
+        "cgi-bin/message/wxopen/updatablemsg/send",
+        "wxaapi/newtmpl/deltemplate",
+        "cgi-bin/message/subscribe/send",
+        "wxaapi/newtmpl/addtemplate",
+        "wxa/msg_sec_check",
+        "wxa/media_check_async",
+        "wxa/getuserriskrank",
+        "datacube/getweanalysisappidweeklyretaininfo",
+        "datacube/getweanalysisappidmonthlyretaininfo",
+        "datacube/getweanalysisappiddailyretaininfo",
+        "datacube/getweanalysisappidmonthlyvisittrend",
+        "datacube/getweanalysisappiddailyvisittrend",
+        "datacube/getweanalysisappidweeklyvisittrend",
+        "datacube/getweanalysisappiddailysummarytrend",
+        "datacube/getweanalysisappidvisitpage",
+        "datacube/getweanalysisappiduserportrait",
+        "wxa/business/performance/boot",
+        "datacube/getweanalysisappidvisitdistribution",
+        "wxa/getwxadevinfo",
+        "wxaapi/log/get_performance",
+        "wxaapi/log/jserr_detail",
+        "wxaapi/log/jserr_list",
+        "wxa/devplugin",
+        "wxa/plugin",
+        "cgi-bin/express/business/account/getall",
+        "cgi-bin/express/business/delivery/getall",
+        "cgi-bin/express/business/printer/getall",
+        "wxa/servicemarket",
+        "cgi-bin/soter/verify_signature"
+      };
+
   protected static final Gson GSON = new Gson();
   private final WxMaMsgService kefuService = new WxMaMsgServiceImpl(this);
   private final WxMaMediaService materialService = new WxMaMediaServiceImpl(this);
@@ -75,26 +133,33 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH
   private final WxMaShopCatService shopCatService = new WxMaShopCatServiceImpl(this);
   private final WxMaShopImgService shopImgService = new WxMaShopImgServiceImpl(this);
   private final WxMaShopAuditService shopAuditService = new WxMaShopAuditServiceImpl(this);
-  private final WxMaShopAfterSaleService shopAfterSaleService = new WxMaShopAfterSaleServiceImpl(this);
+  private final WxMaShopAfterSaleService shopAfterSaleService =
+      new WxMaShopAfterSaleServiceImpl(this);
   private final WxMaShopDeliveryService shopDeliveryService = new WxMaShopDeliveryServiceImpl(this);
   private final WxMaLinkService linkService = new WxMaLinkServiceImpl(this);
-  private final WxMaReimburseInvoiceService reimburseInvoiceService = new WxMaReimburseInvoiceServiceImpl(this);
-  private final WxMaDeviceSubscribeService deviceSubscribeService = new WxMaDeviceSubscribeServiceImpl(this);
+  private final WxMaReimburseInvoiceService reimburseInvoiceService =
+      new WxMaReimburseInvoiceServiceImpl(this);
+  private final WxMaDeviceSubscribeService deviceSubscribeService =
+      new WxMaDeviceSubscribeServiceImpl(this);
   private final WxMaMarketingService marketingService = new WxMaMarketingServiceImpl(this);
-  private final WxMaImmediateDeliveryService immediateDeliveryService = new WxMaImmediateDeliveryServiceImpl(this);
+  private final WxMaImmediateDeliveryService immediateDeliveryService =
+      new WxMaImmediateDeliveryServiceImpl(this);
   private final WxMaShopSharerService shopSharerService = new WxMaShopSharerServiceImpl(this);
   private final WxMaProductService productService = new WxMaProductServiceImpl(this);
   private final WxMaProductOrderService productOrderService = new WxMaProductOrderServiceImpl(this);
   private final WxMaShopCouponService wxMaShopCouponService = new WxMaShopCouponServiceImpl(this);
   private final WxMaShopPayService wxMaShopPayService = new WxMaShopPayServiceImpl(this);
 
-  private final WxMaOrderShippingService wxMaOrderShippingService = new WxMaOrderShippingServiceImpl(this);
+  private final WxMaOrderShippingService wxMaOrderShippingService =
+      new WxMaOrderShippingServiceImpl(this);
 
   private final WxMaOpenApiService wxMaOpenApiService = new WxMaOpenApiServiceImpl(this);
   private final WxMaVodService wxMaVodService = new WxMaVodServiceImpl(this);
   private final WxMaXPayService wxMaXPayService = new WxMaXPayServiceImpl(this);
-  private final WxMaExpressDeliveryReturnService wxMaExpressDeliveryReturnService = new WxMaExpressDeliveryReturnServiceImpl(this);
+  private final WxMaExpressDeliveryReturnService wxMaExpressDeliveryReturnService =
+      new WxMaExpressDeliveryReturnServiceImpl(this);
   private final WxMaPromotionService wxMaPromotionService = new WxMaPromotionServiceImpl(this);
+  private final WxMaIntracityService intracityService = new WxMaIntracityServiceImpl(this);
 
   private Map configMap = new HashMap<>();
   private int retrySleepMillis = 1000;
@@ -107,7 +172,7 @@ public RequestHttp getRequestHttp() {
 
   @Override
   public String getPaidUnionId(String openid, String transactionId, String mchId, String outTradeNo)
-    throws WxErrorException {
+      throws WxErrorException {
     Map params = new HashMap<>(8);
     params.put("openid", openid);
 
@@ -123,7 +188,8 @@ public String getPaidUnionId(String openid, String transactionId, String mchId,
       params.put("out_trade_no", outTradeNo);
     }
 
-    String responseContent = this.get(GET_PAID_UNION_ID_URL, Joiner.on("&").withKeyValueSeparator("=").join(params));
+    String responseContent =
+        this.get(GET_PAID_UNION_ID_URL, Joiner.on("&").withKeyValueSeparator("=").join(params));
     WxError error = WxError.fromJson(responseContent, WxType.MiniApp);
     if (error.getErrorCode() != 0) {
       throw new WxErrorException(error);
@@ -141,12 +207,14 @@ public WxMaJscode2SessionResult jsCode2SessionInfo(String jsCode) throws WxError
     params.put("js_code", jsCode);
     params.put("grant_type", "authorization_code");
 
-    String result = get(JSCODE_TO_SESSION_URL, Joiner.on("&").withKeyValueSeparator("=").join(params));
+    String result =
+        get(JSCODE_TO_SESSION_URL, Joiner.on("&").withKeyValueSeparator("=").join(params));
     return WxMaJscode2SessionResult.fromJson(result);
   }
 
   @Override
-  public void setDynamicData(int lifespan, String type, int scene, String data) throws WxErrorException {
+  public void setDynamicData(int lifespan, String type, int scene, String data)
+      throws WxErrorException {
     JsonObject jsonObject = new JsonObject();
     jsonObject.addProperty("lifespan", lifespan);
     jsonObject.addProperty("query", WxGsonBuilder.create().toJson(ImmutableMap.of("type", type)));
@@ -211,7 +279,6 @@ public String getAccessToken(boolean forceRefresh) throws WxErrorException {
    */
   protected abstract String doGetAccessTokenRequest() throws IOException;
 
-
   /**
    * 通过网络请求获取稳定版接口调用凭据
    *
@@ -225,14 +292,33 @@ public String get(String url, String queryParam) throws WxErrorException {
     return execute(SimpleGetRequestExecutor.create(this), url, queryParam);
   }
 
+  private boolean isApiSignatureRequired(String url) {
+    return this.getWxMaConfig().getApiSignatureAesKey() != null
+        && Arrays.stream(urlPathSupportApiSignature).anyMatch(part -> url.contains(part));
+  }
+
   @Override
   public String post(String url, String postData) throws WxErrorException {
-    return execute(SimplePostRequestExecutor.create(this), url, postData);
+    if (isApiSignatureRequired(url)) {
+      // 接口需要签名
+      log.debug("已经配置接口需要签名,接口{}将走加密访问路径", url);
+      JsonObject jsonObject = GSON.fromJson(postData, JsonObject.class);
+      return postWithSignature(url, jsonObject);
+    } else {
+      return execute(SimplePostRequestExecutor.create(this), url, postData);
+    }
   }
 
   @Override
   public String post(String url, Object obj) throws WxErrorException {
-    return this.execute(SimplePostRequestExecutor.create(this), url, WxGsonBuilder.create().toJson(obj));
+    if (isApiSignatureRequired(url)) {
+      // 接口需要签名
+      log.debug("已经配置接口需要签名,接口{}将走加密访问路径", url);
+      return postWithSignature(url, obj);
+    } else {
+      return this.execute(
+          SimplePostRequestExecutor.create(this), url, WxGsonBuilder.create().toJson(obj));
+    }
   }
 
   @Override
@@ -240,34 +326,66 @@ public String post(String url, ToJson obj) throws WxErrorException {
     return this.post(url, obj.toJson());
   }
 
+  @Override
+  public String post(String url, JsonObject jsonObject) throws WxErrorException {
+    return this.post(url, jsonObject.toString());
+  }
+
   @Override
   public String upload(String url, CommonUploadParam param) throws WxErrorException {
-    RequestExecutor executor = CommonUploadRequestExecutor.create(getRequestHttp());
+    RequestExecutor executor =
+        CommonUploadRequestExecutor.create(getRequestHttp());
     return this.execute(executor, url, param);
   }
 
+  /** 向微信端发送请求,在这里执行的策略是当发生access_token过期时才去刷新,然后重新执行请求,而不是全局定时请求 */
   @Override
-  public String post(String url, JsonObject jsonObject) throws WxErrorException {
-    return this.post(url, jsonObject.toString());
+  public  R execute(RequestExecutor executor, String uri, T data)
+      throws WxErrorException {
+    String dataForLog;
+    if (data instanceof String) {
+      dataForLog = DataUtils.handleDataWithSecret((String) data);
+    } else {
+      dataForLog = data.toString();
+    }
+    return excuteWithRetry(
+        (uriWithAccessToken) -> executor.execute(uriWithAccessToken, data, WxType.MiniApp),
+        uri,
+        dataForLog);
   }
 
-  /**
-   * 向微信端发送请求,在这里执行的策略是当发生access_token过期时才去刷新,然后重新执行请求,而不是全局定时请求
-   */
   @Override
-  public  T execute(RequestExecutor executor, String uri, E data) throws WxErrorException {
+  public WxMaApiResponse execute(
+      ApiSignaturePostRequestExecutor executor,
+      String uri,
+      Map headers,
+      String data)
+      throws WxErrorException {
+    return excuteWithRetry(
+        (uriWithAccessToken) -> executor.execute(uriWithAccessToken, headers, data, WxType.MiniApp),
+        uri,
+        data);
+  }
+
+  private static interface ExecutorAction {
+    R execute(String urlWithAccessToken) throws IOException, WxErrorException;
+  }
+
+  private  R excuteWithRetry(ExecutorAction executor, String uri, String dataForLog)
+      throws WxErrorException {
     int retryTimes = 0;
     do {
       try {
-        return this.executeInternal(executor, uri, data, false);
+        return this.executeInternal(executor, uri, dataForLog, false);
       } catch (WxErrorException e) {
         if (retryTimes + 1 > this.maxRetryTimes) {
           log.warn("重试达到最大次数【{}】", maxRetryTimes);
-          //最后一次重试失败后,直接抛出异常,不再等待
-          throw new WxErrorException(WxError.builder()
-            .errorCode(e.getError().getErrorCode())
-            .errorMsg("微信服务端异常,超出重试次数!")
-            .build());
+          // 最后一次重试失败后,直接抛出异常,不再等待
+          throw new WxErrorException(
+              WxError.builder()
+                  .errorCode(e.getError().getErrorCode())
+                  .errorMsg("微信服务端异常,超出重试次数!")
+                  .build());
         }
 
         WxError error = e.getError();
@@ -290,8 +408,9 @@ public  T execute(RequestExecutor executor, String uri, E data) thro
     throw new WxRuntimeException("微信服务端异常,超出重试次数");
   }
 
-  private  T executeInternal(RequestExecutor executor, String uri, E data, boolean doNotAutoRefreshToken) throws WxErrorException {
-    E dataForLog = DataUtils.handleDataWithSecret(data);
+  private  R executeInternal(
+      ExecutorAction executor, String uri, String dataForLog, boolean doNotAutoRefreshToken)
+      throws WxErrorException {
 
     if (uri.contains("access_token=")) {
       throw new IllegalArgumentException("uri参数中不允许有access_token: " + uri);
@@ -302,10 +421,10 @@ private  T executeInternal(RequestExecutor executor, String uri, E d
       uri = uri.replace("https://api.weixin.qq.com", this.getWxMaConfig().getApiHostUrl());
     }
 
-    String uriWithAccessToken = uri + (uri.contains("?") ? "&" : "?") + "access_token=" + accessToken;
-
+    String uriWithAccessToken =
+        uri + (uri.contains("?") ? "&" : "?") + "access_token=" + accessToken;
     try {
-      T result = executor.execute(uriWithAccessToken, data, WxType.MiniApp);
+      R result = executor.execute(uriWithAccessToken);
       log.debug("\n【请求地址】: {}\n【请求参数】:{}\n【响应数据】:{}", uriWithAccessToken, dataForLog, result);
       return result;
     } catch (WxErrorException e) {
@@ -324,10 +443,11 @@ private  T executeInternal(RequestExecutor executor, String uri, E d
           lock.unlock();
         }
         if (this.getWxMaConfig().autoRefreshToken() && !doNotAutoRefreshToken) {
-          log.warn("即将重新获取新的access_token,错误代码:{},错误信息:{}", error.getErrorCode(), error.getErrorMsg());
-          //下一次不再自动重试
-          //当小程序误调用第三方平台专属接口时,第三方无法使用小程序的access token,如果可以继续自动获取token会导致无限循环重试,直到栈溢出
-          return this.executeInternal(executor, uri, data, true);
+          log.warn(
+              "即将重新获取新的access_token,错误代码:{},错误信息:{}", error.getErrorCode(), error.getErrorMsg());
+          // 下一次不再自动重试
+          // 当小程序误调用第三方平台专属接口时,第三方无法使用小程序的access token,如果可以继续自动获取token会导致无限循环重试,直到栈溢出
+          return this.executeInternal(executor, uri, dataForLog, true);
         }
       }
 
@@ -337,7 +457,8 @@ private  T executeInternal(RequestExecutor executor, String uri, E d
       }
       return null;
     } catch (IOException e) {
-      log.warn("\n【请求地址】: {}\n【请求参数】:{}\n【异常信息】:{}", uriWithAccessToken, dataForLog, e.getMessage());
+      log.warn(
+          "\n【请求地址】: {}\n【请求参数】:{}\n【异常信息】:{}", uriWithAccessToken, dataForLog, e.getMessage());
       throw new WxRuntimeException(e);
     }
   }
@@ -712,6 +833,164 @@ public WxMaExpressDeliveryReturnService getWxMaExpressDeliveryReturnService() {
 
   @Override
   public WxMaPromotionService getWxMaPromotionService() {
-      return this.wxMaPromotionService;
+    return this.wxMaPromotionService;
+  }
+
+  @Override
+  public String postWithSignature(String url, Object obj) throws WxErrorException {
+    Gson gson =
+        new GsonBuilder()
+            .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
+            .create();
+    JsonObject jsonObject = gson.toJsonTree(obj).getAsJsonObject();
+    return this.postWithSignature(url, jsonObject);
+  }
+
+  private String generateNonce() {
+    byte[] nonce = generateRandomBytes(16);
+    return base64Encode(nonce).replace("=", "");
+  }
+
+  private byte[] generateRandomBytes(int length) {
+    byte[] bytes = new byte[length];
+    new SecureRandom().nextBytes(bytes);
+    return bytes;
+  }
+
+  private String base64Encode(byte[] data) {
+    return Base64.getEncoder().encodeToString(data);
+  }
+
+  @Override
+  public String postWithSignature(String url, JsonObject jsonObject) throws WxErrorException {
+    long timestamp = System.currentTimeMillis() / 1000;
+    String appId = this.getWxMaConfig().getAppid();
+    String rndStr = UUID.randomUUID().toString().replace("-", "").substring(0, 30);
+    String aesKey = this.getWxMaConfig().getApiSignatureAesKey();
+    String aesKeySn = this.getWxMaConfig().getApiSignatureAesKeySn();
+
+    jsonObject.addProperty("_n", rndStr);
+    jsonObject.addProperty("_appid", appId);
+    jsonObject.addProperty("_timestamp", timestamp);
+
+    String plainText = jsonObject.toString();
+    String urlPath;
+    if (url.contains("?")) {
+      urlPath = url.substring(0, url.indexOf("?"));
+    } else {
+      urlPath = url;
+    }
+    String aad = urlPath + "|" + appId + "|" + timestamp + "|" + aesKeySn;
+    byte[] realKey;
+    try {
+      realKey = Base64.getDecoder().decode(aesKey);
+    } catch (Exception ex) {
+      log.error("解析AESKEY失败 {}", aesKey, ex);
+      throw new SecurityException("解析AES KEY失败,请检查ApiSignatureAesKey是否正确", ex);
+    }
+    byte[] realIv = generateRandomBytes(12);
+    byte[] realAad = aad.getBytes(StandardCharsets.UTF_8);
+    byte[] realPlainText = plainText.getBytes(StandardCharsets.UTF_8);
+
+    try {
+      // 加密内容 AES
+      Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
+      SecretKeySpec aesKeySpec = new SecretKeySpec(realKey, "AES");
+      GCMParameterSpec parameterSpec = new GCMParameterSpec(128, realIv);
+      cipher.init(Cipher.ENCRYPT_MODE, aesKeySpec, parameterSpec);
+      cipher.updateAAD(realAad);
+
+      byte[] ciphertext = cipher.doFinal(realPlainText);
+      byte[] encryptedData = Arrays.copyOfRange(ciphertext, 0, ciphertext.length - 16);
+      byte[] authTag = Arrays.copyOfRange(ciphertext, ciphertext.length - 16, ciphertext.length);
+
+      JsonObject reqData = new JsonObject();
+      reqData.addProperty("iv", base64Encode(realIv));
+      reqData.addProperty("data", base64Encode(encryptedData));
+      reqData.addProperty("authtag", base64Encode(authTag));
+      String requestJson = reqData.toString();
+
+      // 计算签名 RSA
+      String payload = urlPath + "\n" + appId + "\n" + timestamp + "\n" + requestJson;
+      byte[] dataBuffer = payload.getBytes(StandardCharsets.UTF_8);
+      RSAPrivateKey priKey;
+      try {
+        String rsaPrivateKey = this.getWxMaConfig().getApiSignatureRsaPrivateKey();
+        rsaPrivateKey = rsaPrivateKey.replace("-----BEGIN PRIVATE KEY-----", "");
+        rsaPrivateKey = rsaPrivateKey.replace("-----END PRIVATE KEY-----", "");
+        rsaPrivateKey = rsaPrivateKey.replaceAll("\\s+", "");
+        byte[] decoded = Base64.getDecoder().decode(rsaPrivateKey.getBytes(StandardCharsets.UTF_8));
+        PKCS8EncodedKeySpec rsaKeySpec = new PKCS8EncodedKeySpec(decoded);
+        priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(rsaKeySpec);
+      } catch (Exception ex) {
+        log.error("解析RSA KEY失败 {}", aesKey, ex);
+        throw new SecurityException("解析RSA KEY失败,请检查ApiSignatureRsaPrivateKey是否正确,需要PKCS8格式私钥", ex);
+      }
+      Signature signature = Signature.getInstance("RSASSA-PSS");
+      // salt长度,需与SHA256结果长度(32)一致
+      PSSParameterSpec pssParameterSpec =
+          new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1);
+      signature.setParameter(pssParameterSpec);
+      signature.initSign(priKey);
+      signature.update(dataBuffer);
+      byte[] sigBuffer = signature.sign();
+      String signatureString = base64Encode(sigBuffer);
+
+      Map header = new HashMap<>();
+      header.put("Wechatmp-Signature", signatureString);
+      header.put("Wechatmp-Appid", appId);
+      header.put("Wechatmp-TimeStamp", String.valueOf(timestamp));
+      log.debug("发送请求uri:{}, headers:{}, postData:{}", url, header, requestJson);
+      WxMaApiResponse response =
+          this.execute(ApiSignaturePostRequestExecutor.create(this), url, header, requestJson);
+      String respTs = response.getHeaders().get("Wechatmp-TimeStamp");
+      String respAad = urlPath + "|" + appId + "|" + respTs + "|" + aesKeySn;
+      if (!appId.equals(response.getHeaders().get("Wechatmp-Appid"))) {
+        throw new RuntimeException("响应的appId不符 " + response.getHeaders().get("Wechatmp-Appid"));
+      }
+      // 省略验证平台签名部分,直接解密内容,返回明文
+      String decryptedData = aesDecodeResponse(response, respAad, aesKeySpec);
+      log.debug("解密后的响应:{}", decryptedData);
+      WxError error = WxError.fromJson(decryptedData, WxType.MiniApp);
+      if (error.getErrorCode() != 0) {
+        log.debug("调用API出错, uri:{}, postData:{}, response:{}", url, plainText, error);
+        throw new WxErrorException(error);
+      }
+      return decryptedData;
+    } catch (WxErrorException | SecurityException ex) {
+      throw ex;
+    } catch (Exception e) {
+      log.error("postWithSignature", e);
+      throw new RuntimeException(e);
+    }
+  }
+
+  private String aesDecodeResponse(WxMaApiResponse response, String aad, SecretKeySpec aesKeySpec)
+      throws Exception {
+    Map map = GSON.fromJson(response.getContent(), Map.class);
+    String iv = (String) map.get("iv");
+    String data = (String) map.get("data");
+    String authTag = (String) map.get("authtag");
+
+    byte[] dataBytes = Base64.getDecoder().decode(data);
+    byte[] authTagBytes = Base64.getDecoder().decode(authTag);
+    byte[] newDataBytes = new byte[dataBytes.length + authTagBytes.length];
+    System.arraycopy(dataBytes, 0, newDataBytes, 0, dataBytes.length);
+    System.arraycopy(authTagBytes, 0, newDataBytes, dataBytes.length, authTagBytes.length);
+    byte[] aadBytes = aad.getBytes(StandardCharsets.UTF_8);
+    byte[] ivBytes = Base64.getDecoder().decode(iv);
+
+    Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
+    GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(128, ivBytes);
+    cipher.init(Cipher.DECRYPT_MODE, aesKeySpec, gcmParameterSpec);
+    cipher.updateAAD(aadBytes);
+    byte[] decryptedBytes = cipher.doFinal(newDataBytes);
+
+    return new String(decryptedBytes, StandardCharsets.UTF_8);
+  }
+
+  @Override
+  public WxMaIntracityService getIntracityService() {
+    return this.intracityService;
   }
 }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpl.java
new file mode 100644
index 0000000000..46a728eca9
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpl.java
@@ -0,0 +1,276 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Intracity;
+import static me.chanjar.weixin.common.api.WxConsts.ERR_CODE;
+
+import cn.binarywang.wx.miniapp.api.WxMaIntracityService;
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.intractiy.*;
+import com.google.gson.*;
+import com.google.gson.reflect.TypeToken;
+import java.lang.reflect.Type;
+import java.util.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.enums.WxType;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.json.GsonParser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@RequiredArgsConstructor
+@Slf4j
+public class WxMaIntracityServiceImpl implements WxMaIntracityService {
+  private final WxMaService wxMaService;
+  private static final Logger logger = LoggerFactory.getLogger(WxMaIntracityServiceImpl.class);
+
+  private final Gson gson =
+      new GsonBuilder()
+          .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
+          .create();
+
+  private void checkStringResponse(String response) throws WxErrorException {
+    JsonObject respObj = GsonParser.parse(response);
+    if (respObj.get(ERR_CODE).getAsInt() != 0) {
+      throw new WxErrorException(WxError.fromJson(response, WxType.MiniApp));
+    }
+  }
+
+  @Override
+  public void apply() throws WxErrorException {
+    String response = this.wxMaService.post(Intracity.APPLY_URL, "{}");
+    checkStringResponse(response);
+  }
+
+  @Override
+  public String createStore(WxMaStore store) throws WxErrorException {
+    if (store.getOutStoreId() == null) {
+      throw new IllegalArgumentException("创建门店时outStoreId不能为空");
+    }
+    if (store.getWxStoreId() != null) {
+      throw new IllegalArgumentException("创建门店时wxStoreId只能是null");
+    }
+    String response = this.wxMaService.postWithSignature(Intracity.CREATE_STORE_URL, store);
+    Map map = gson.fromJson(response, Map.class);
+    return (String) map.get("wx_store_id");
+  }
+
+  @Override
+  public void updateStore(WxMaStore store) throws WxErrorException {
+    if (store.getWxStoreId() == null && store.getOutStoreId() == null) {
+      throw new IllegalArgumentException("更新门店时wxStoreId 或 outStoreId 至少要有一个不为null");
+    }
+    JsonObject request = new JsonObject();
+    Map keys = new HashMap<>();
+    if (store.getWxStoreId() != null) {
+      keys.put("wx_store_id", store.getWxStoreId());
+    } else {
+      keys.put("out_store_id", store.getOutStoreId());
+    }
+    request.add("keys", gson.toJsonTree(keys));
+    Map updateContent = new HashMap<>();
+    if (store.getStoreName() != null) {
+      updateContent.put("store_name", store.getStoreName());
+    }
+    if (store.getOrderPattern() == 1 || store.getOrderPattern() == 2) {
+      updateContent.put("order_pattern", store.getOrderPattern());
+    }
+    if (store.getServiceTransPrefer() != null) {
+      updateContent.put("service_trans_prefer", store.getServiceTransPrefer());
+    }
+    if (store.getAddressInfo() != null) {
+      updateContent.put("address_info", store.getAddressInfo());
+    }
+    request.add("content", gson.toJsonTree(updateContent));
+    String response = this.wxMaService.postWithSignature(Intracity.UPDATE_STORE_URL, request);
+    checkStringResponse(response);
+  }
+
+  @Override
+  public List listAllStores() throws WxErrorException {
+    return queryStore(null, null);
+  }
+
+  @Override
+  public WxMaStore queryStoreByWxStoreId(String wxStoreId) throws WxErrorException {
+    List list = queryStore(wxStoreId, null);
+    return list.isEmpty() ? null : list.get(0);
+  }
+
+  @Override
+  public List queryStoreByOutStoreId(String outStoreId) throws WxErrorException {
+    return queryStore(null, outStoreId);
+  }
+
+  private List queryStore(String wxStoreId, String outStoreId) throws WxErrorException {
+    Map map = new HashMap<>();
+    if (wxStoreId != null) {
+      map.put("wx_store_id", wxStoreId);
+    } else if (outStoreId != null) {
+      map.put("out_store_id", outStoreId);
+    }
+    String response = this.wxMaService.postWithSignature(Intracity.QUERY_STORE_URL, map);
+    JsonObject jsonObject = gson.fromJson(response, JsonObject.class);
+    Type listType = new TypeToken>() {}.getType();
+    return gson.fromJson(jsonObject.getAsJsonArray("store_list"), listType);
+  }
+
+  @Override
+  public String storeCharge(WxMaStoreChargeRequest request) throws WxErrorException {
+    String response = this.wxMaService.postWithSignature(Intracity.STORE_CHARGE, request);
+    Map map = gson.fromJson(response, Map.class);
+    return (String) map.get("payurl");
+  }
+
+  @Override
+  public int storeRefund(WxMaStoreRefundRequest request) throws WxErrorException {
+    String response = this.wxMaService.postWithSignature(Intracity.STORE_REFUND, request);
+    Map map = gson.fromJson(response, Map.class);
+    return ((Number) map.get("refund_amount")).intValue();
+  }
+
+  @Override
+  public WxMaStoreFlowResponse queryFlow(
+      WxMaQueryFlowRequest request) throws WxErrorException {
+    if (request == null || request.getWxStoreId() == null) {
+      throw new IllegalArgumentException("查询请求 wxStoreId 不可为空");
+    }
+    WxMaStoreFlowResponse inst =
+        getFlowInstanceByType(request.getFlowType());
+    if (inst == null) {
+      throw new IllegalArgumentException("查询请求 flowType 不正确,只能是1、2、3之一");
+    }
+
+    String response = this.wxMaService.postWithSignature(Intracity.QUERY_FLOW, request);
+
+    WxMaStoreFlowResponse flowResponse;
+    flowResponse =
+        (WxMaStoreFlowResponse)
+            gson.fromJson(response, inst.getClass());
+    logger.debug("queryFlow: {}", flowResponse);
+    return flowResponse;
+  }
+
+  private WxMaStoreFlowResponse
+      getFlowInstanceByType(int flowType) {
+    WxMaStoreFlowResponse inst;
+    if (flowType == 1) {
+      inst = new WxMaStoreFlowResponse();
+    } else if (flowType == 2) {
+      inst = new WxMaStoreFlowResponse();
+    } else if (flowType == 3) {
+      inst = new WxMaStoreFlowResponse();
+    } else {
+      return null;
+    }
+    return inst;
+  }
+
+  @Override
+  public WxMaStoreBalance balanceQuery(String wxStoreId, String serviceTransId, PayMode payMode)
+      throws WxErrorException {
+    if (wxStoreId == null && (payMode != null && payMode != PayMode.STORE)) {
+      throw new IllegalArgumentException("payMode是PAY_MODE_STORE或null时,必须传递wxStoreId");
+    }
+    Map request = new HashMap<>();
+    if (wxStoreId != null) {
+      request.put("wx_store_id", wxStoreId);
+    }
+    if (serviceTransId != null) {
+      request.put("service_trans_id", serviceTransId);
+    }
+    if (payMode != null) {
+      request.put("pay_mode", payMode);
+    }
+    String response = this.wxMaService.postWithSignature(Intracity.BALANCE_QUERY, request);
+    WxMaStoreBalance balance = gson.fromJson(response, WxMaStoreBalance.class);
+    logger.debug("balance: {}", balance);
+    return balance;
+  }
+
+  public void setPayMode(PayMode payMode) throws WxErrorException {
+    Map request = new HashMap<>();
+    request.put("pay_mode", payMode);
+    request.put("appid", wxMaService.getWxMaConfig().getAppid());
+    String response = this.wxMaService.postWithSignature(Intracity.SET_PAY_MODE, request);
+    checkStringResponse(response);
+  }
+
+  public WxMaGetPayModeResponse getPayMode() throws WxErrorException {
+    Map request = new HashMap<>();
+    request.put("appid", wxMaService.getWxMaConfig().getAppid());
+    String response = this.wxMaService.postWithSignature(Intracity.GET_PAY_MODE, request);
+    return gson.fromJson(response, WxMaGetPayModeResponse.class);
+  }
+
+  @Override
+  public WxMaAddOrderResponse preAddOrder(WxMaPreAddOrderRequest request) throws WxErrorException {
+    String response = this.wxMaService.postWithSignature(Intracity.PRE_ADD_ORDER, request);
+    return gson.fromJson(response, WxMaAddOrderResponse.class);
+  }
+
+  @Override
+  public WxMaAddOrderResponse addOrder(WxMaAddOrderRequest request) throws WxErrorException {
+    String response = this.wxMaService.postWithSignature(Intracity.ADD_ORDER, request);
+    return gson.fromJson(response, WxMaAddOrderResponse.class);
+  }
+
+  @Override
+  public WxMaOrder queryOrderByWxOrderId(String wxOrderId) throws WxErrorException {
+    Map map = new HashMap<>();
+    map.put("wx_order_id", wxOrderId);
+    String response = this.wxMaService.postWithSignature(Intracity.QUERY_ORDER, map);
+    return gson.fromJson(response, WxMaOrder.class);
+  }
+
+  @Override
+  public WxMaOrder queryOrderByStoreOrderId(String wxStoreId, String storeOrderId)
+      throws WxErrorException {
+    Map map = new HashMap<>();
+    map.put("wx_store_id", wxStoreId);
+    map.put("store_order_id", storeOrderId);
+    String response = this.wxMaService.postWithSignature(Intracity.QUERY_ORDER, map);
+    return gson.fromJson(response, WxMaOrder.class);
+  }
+
+  @Override
+  public WxMaCancelOrderResponse cancelOrderByWxOrderId(
+      String wxOrderId, int cancelReasonId, String cancelReason) throws WxErrorException {
+    Map map = new HashMap<>();
+    map.put("wx_order_id", wxOrderId);
+    map.put("cancel_reason_id", cancelReasonId);
+    if (cancelReason != null) {
+      map.put("cancel_reason", cancelReason);
+    }
+    String response = this.wxMaService.postWithSignature(Intracity.CANCEL_ORDER, map);
+    return gson.fromJson(response, WxMaCancelOrderResponse.class);
+  }
+
+  @Override
+  public WxMaCancelOrderResponse cancelOrderByStoreOrderId(
+      String wxStoreId, String storeOrderId, int cancelReasonId, String cancelReason)
+      throws WxErrorException {
+    Map map = new HashMap<>();
+    map.put("wx_store_id", wxStoreId);
+    map.put("store_order_id", storeOrderId);
+    map.put("cancel_reason_id", cancelReasonId);
+    if (cancelReason != null) {
+      map.put("cancel_reason", cancelReason);
+    }
+    String response = this.wxMaService.postWithSignature(Intracity.CANCEL_ORDER, map);
+    return gson.fromJson(response, WxMaCancelOrderResponse.class);
+  }
+
+  @Override
+  public List getCity(String serviceTransId) throws WxErrorException {
+    Map map = new HashMap<>();
+    if (serviceTransId != null) {
+      map.put("service_trans_id", serviceTransId);
+    }
+    String response = this.wxMaService.postWithSignature(Intracity.GET_CITY, map);
+    JsonObject jsonObject = gson.fromJson(response, JsonObject.class);
+    Type listType = new TypeToken>() {}.getType();
+    return gson.fromJson(jsonObject.getAsJsonArray("support_list"), listType);
+  }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaApiResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaApiResponse.java
new file mode 100644
index 0000000000..47345ba408
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaApiResponse.java
@@ -0,0 +1,34 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import java.util.Map;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class WxMaApiResponse {
+  private static final Logger logger = LoggerFactory.getLogger(WxMaApiResponse.class);
+
+  private String content;
+  private Map headers;
+
+  public String getContent() {
+    return content;
+  }
+
+  public void setContent(String content) {
+    this.content = content;
+  }
+
+  public Map getHeaders() {
+    return headers;
+  }
+
+  public void setHeaders(Map headers) {
+    this.headers = headers;
+  }
+
+  @Override
+  public String toString() {
+    return ToStringBuilder.reflectionToString(this);
+  }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/BasicWxMaOrder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/BasicWxMaOrder.java
new file mode 100644
index 0000000000..868cf5e5c3
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/BasicWxMaOrder.java
@@ -0,0 +1,128 @@
+package cn.binarywang.wx.miniapp.bean.intractiy;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+class BasicWxMaOrder {
+
+  private String wxStoreId;
+  private String userName;
+  private String userPhone;
+  private double userLng;
+  private double userLat;
+  private String userAddress;
+  private int useSandbox;
+
+  public String getWxStoreId() {
+    return wxStoreId;
+  }
+
+  public void setWxStoreId(String wxStoreId) {
+    this.wxStoreId = wxStoreId;
+  }
+
+  public String getUserName() {
+    return userName;
+  }
+
+  public void setUserName(String userName) {
+    this.userName = userName;
+  }
+
+  public String getUserPhone() {
+    return userPhone;
+  }
+
+  public void setUserPhone(String userPhone) {
+    this.userPhone = userPhone;
+  }
+
+  public double getUserLng() {
+    return userLng;
+  }
+
+  public void setUserLng(double userLng) {
+    this.userLng = userLng;
+  }
+
+  public double getUserLat() {
+    return userLat;
+  }
+
+  public void setUserLat(double userLat) {
+    this.userLat = userLat;
+  }
+
+  public String getUserAddress() {
+    return userAddress;
+  }
+
+  public void setUserAddress(String userAddress) {
+    this.userAddress = userAddress;
+  }
+
+  public int isUseSandbox() {
+    return useSandbox;
+  }
+
+  public void setUseSandbox(int useSandbox) {
+    this.useSandbox = useSandbox;
+  }
+
+  @Override
+  public String toString() {
+    return ToStringBuilder.reflectionToString(this);
+  }
+
+  static class Cargo {
+    private String cargoName;
+    private int cargoWeight;
+    private int cargoType;
+    private int cargoNum;
+    private int cargoPrice;
+
+    public String getCargoName() {
+      return cargoName;
+    }
+
+    public void setCargoName(String cargoName) {
+      this.cargoName = cargoName;
+    }
+
+    public int getCargoWeight() {
+      return cargoWeight;
+    }
+
+    public void setCargoWeight(int cargoWeight) {
+      this.cargoWeight = cargoWeight;
+    }
+
+    public int getCargoType() {
+      return cargoType;
+    }
+
+    public void setCargoType(int cargoType) {
+      this.cargoType = cargoType;
+    }
+
+    public int getCargoNum() {
+      return cargoNum;
+    }
+
+    public void setCargoNum(int cargoNum) {
+      this.cargoNum = cargoNum;
+    }
+
+    public int getCargoPrice() {
+      return cargoPrice;
+    }
+
+    public void setCargoPrice(int cargoPrice) {
+      this.cargoPrice = cargoPrice;
+    }
+
+    @Override
+    public String toString() {
+      return ToStringBuilder.reflectionToString(this);
+    }
+  }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/BasicWxMaStoreChargeRefundRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/BasicWxMaStoreChargeRefundRequest.java
new file mode 100644
index 0000000000..f9140ad579
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/BasicWxMaStoreChargeRefundRequest.java
@@ -0,0 +1,49 @@
+package cn.binarywang.wx.miniapp.bean.intractiy;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+class BasicWxMaStoreChargeRefundRequest {
+
+  /** 微信门店编号 pay_mode = PAY_MODE_STORE时必传,不传pay_mode时必传wx_store_id */
+  private String wxStoreId;
+
+  /**
+   * 充值/扣费主体 
+ * 门店:PAY_MODE_STORE;小程序:PAY_MODE_APP;服务商:PAY_MODE_COMPONENT,不传pay_mode默认pay_mode=PAY_MODE_STORE + */ + private PayMode payMode; + + /** + * 运力Id,必填。运力ID请参考:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/express/business/intracity_service.html#_6-%E8%BF%90%E5%8A%9B%E5%88%97%E8%A1%A8 + */ + private String serviceTransId; + + public String getWxStoreId() { + return wxStoreId; + } + + public void setWxStoreId(String wxStoreId) { + this.wxStoreId = wxStoreId; + } + + public PayMode getPayMode() { + return payMode; + } + + public void setPayMode(PayMode payMode) { + this.payMode = payMode; + } + + public String getServiceTransId() { + return serviceTransId; + } + + public void setServiceTransId(String serviceTransId) { + this.serviceTransId = serviceTransId; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/PayMode.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/PayMode.java new file mode 100644 index 0000000000..bf779e21fc --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/PayMode.java @@ -0,0 +1,16 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import com.google.gson.annotations.SerializedName; + +/** 充值、扣费主体 */ +public enum PayMode { + /** 门店 */ + @SerializedName("PAY_MODE_STORE") + STORE, + /** 小程序 */ + @SerializedName("PAY_MODE_APP") + APP, + /** 服务商 */ + @SerializedName("PAY_MODE_COMPONENT") + COMPONENT; +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaAddOrderRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaAddOrderRequest.java new file mode 100644 index 0000000000..6e27c5780b --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaAddOrderRequest.java @@ -0,0 +1,133 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import java.util.List; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WxMaAddOrderRequest extends BasicWxMaOrder { + private static final Logger logger = LoggerFactory.getLogger(WxMaAddOrderRequest.class); + private String storeOrderId; + private String userOpenid; + private String orderSeq; + + /** 验证码类型 0:不生成 1:生成取货码 2:生成收货码 3:两者都生成 */ + private int verifyCodeType; + + private String orderDetailPath; + private String callbackUrl; + private Cargo cargo; + + public String getStoreOrderId() { + return storeOrderId; + } + + public void setStoreOrderId(String storeOrderId) { + this.storeOrderId = storeOrderId; + } + + public String getUserOpenid() { + return userOpenid; + } + + public void setUserOpenid(String userOpenid) { + this.userOpenid = userOpenid; + } + + public String getOrderSeq() { + return orderSeq; + } + + public void setOrderSeq(String orderSeq) { + this.orderSeq = orderSeq; + } + + public int getVerifyCodeType() { + return verifyCodeType; + } + + public void setVerifyCodeType(int verifyCodeType) { + this.verifyCodeType = verifyCodeType; + } + + public String getOrderDetailPath() { + return orderDetailPath; + } + + public void setOrderDetailPath(String orderDetailPath) { + this.orderDetailPath = orderDetailPath; + } + + public String getCallbackUrl() { + return callbackUrl; + } + + public void setCallbackUrl(String callbackUrl) { + this.callbackUrl = callbackUrl; + } + + public Cargo getCargo() { + return cargo; + } + + public void setCargo(Cargo cargo) { + this.cargo = cargo; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + public static class Cargo extends BasicWxMaOrder.Cargo { + private List itemList; + + public List getItemList() { + return itemList; + } + + public void setItemList(List itemList) { + this.itemList = itemList; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } + + public static class ItemDetail { + private String itemName; + private String itemPicUrl; + private int count; + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public String getItemPicUrl() { + return itemPicUrl; + } + + public void setItemPicUrl(String itemPicUrl) { + this.itemPicUrl = itemPicUrl; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaAddOrderResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaAddOrderResponse.java new file mode 100644 index 0000000000..7155c11533 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaAddOrderResponse.java @@ -0,0 +1,115 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class WxMaAddOrderResponse { + private String wxOrderId; + private String storeOrderId; + private String wxStoreId; + + /** 配送运力 */ + private String serviceTransId; + + /** 配送距离 单位:米 */ + private int distance; + + /** 运力订单号 */ + private String transOrderId; + + /** 运力配送单号 */ + private String waybillId; + + /** 配送费 */ + private int fee; + + /** 取货码 */ + private String fetchCode; + + /** 取货序号 */ + private String orderSeq; + + public String getWxOrderId() { + return wxOrderId; + } + + public void setWxOrderId(String wxOrderId) { + this.wxOrderId = wxOrderId; + } + + public String getStoreOrderId() { + return storeOrderId; + } + + public void setStoreOrderId(String storeOrderId) { + this.storeOrderId = storeOrderId; + } + + public String getWxStoreId() { + return wxStoreId; + } + + public void setWxStoreId(String wxStoreId) { + this.wxStoreId = wxStoreId; + } + + public String getServiceTransId() { + return serviceTransId; + } + + public void setServiceTransId(String serviceTransId) { + this.serviceTransId = serviceTransId; + } + + public int getDistance() { + return distance; + } + + public void setDistance(int distance) { + this.distance = distance; + } + + public String getTransOrderId() { + return transOrderId; + } + + public void setTransOrderId(String transOrderId) { + this.transOrderId = transOrderId; + } + + public String getWaybillId() { + return waybillId; + } + + public void setWaybillId(String waybillId) { + this.waybillId = waybillId; + } + + public int getFee() { + return fee; + } + + public void setFee(int fee) { + this.fee = fee; + } + + public String getFetchCode() { + return fetchCode; + } + + public void setFetchCode(String fetchCode) { + this.fetchCode = fetchCode; + } + + public String getOrderSeq() { + return orderSeq; + } + + public void setOrderSeq(String orderSeq) { + this.orderSeq = orderSeq; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaCancelOrderResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaCancelOrderResponse.java new file mode 100644 index 0000000000..a2a21d7fff --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaCancelOrderResponse.java @@ -0,0 +1,67 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class WxMaCancelOrderResponse { + private String wxOrderId; + private String storeOrderId; + private String wxStoreId; + private String orderStatus; + private String appid; + + /** 违约金 */ + private int deductfee; + + public String getWxOrderId() { + return wxOrderId; + } + + public void setWxOrderId(String wxOrderId) { + this.wxOrderId = wxOrderId; + } + + public String getStoreOrderId() { + return storeOrderId; + } + + public void setStoreOrderId(String storeOrderId) { + this.storeOrderId = storeOrderId; + } + + public String getWxStoreId() { + return wxStoreId; + } + + public void setWxStoreId(String wxStoreId) { + this.wxStoreId = wxStoreId; + } + + public String getOrderStatus() { + return orderStatus; + } + + public void setOrderStatus(String orderStatus) { + this.orderStatus = orderStatus; + } + + public String getAppid() { + return appid; + } + + public void setAppid(String appid) { + this.appid = appid; + } + + public int getDeductfee() { + return deductfee; + } + + public void setDeductfee(int deductfee) { + this.deductfee = deductfee; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaGetPayModeResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaGetPayModeResponse.java new file mode 100644 index 0000000000..8d49ce0880 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaGetPayModeResponse.java @@ -0,0 +1,42 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WxMaGetPayModeResponse { + private static final Logger logger = LoggerFactory.getLogger(WxMaGetPayModeResponse.class); + + private PayMode payMode; + private String payAppid; + private String componentAppid; + + public PayMode getPayMode() { + return payMode; + } + + public void setPayMode(PayMode payMode) { + this.payMode = payMode; + } + + public String getPayAppid() { + return payAppid; + } + + public void setPayAppid(String payAppid) { + this.payAppid = payAppid; + } + + public String getComponentAppid() { + return componentAppid; + } + + public void setComponentAppid(String componentAppid) { + this.componentAppid = componentAppid; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaOrder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaOrder.java new file mode 100644 index 0000000000..fbec5c8c6c --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaOrder.java @@ -0,0 +1,344 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import java.util.Date; +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class WxMaOrder extends WxMaAddOrderRequest { + private String wxOrderId; + private int orderStatus; + private String appid; + private String serviceTransId; + private String deliveryNo; + private int actualfee; + private int deductfee; + private long createTime; + private long acceptTime; + private long fetchTime; + private long finishTime; + private long cancelTime; + private long expectedFinishTime; + private String fetchCode; + private String recvCode; + private TransporterInfo transporterInfo; + private StoreInfo storeInfo; + private ReceiverInfo receiverInfo; + private Cargo cargoInfo; + + public String getWxOrderId() { + return wxOrderId; + } + + public void setWxOrderId(String wxOrderId) { + this.wxOrderId = wxOrderId; + } + + public int getOrderStatus() { + return orderStatus; + } + + public void setOrderStatus(int orderStatus) { + this.orderStatus = orderStatus; + } + + public String getAppid() { + return appid; + } + + public void setAppid(String appid) { + this.appid = appid; + } + + public String getServiceTransId() { + return serviceTransId; + } + + public void setServiceTransId(String serviceTransId) { + this.serviceTransId = serviceTransId; + } + + public String getDeliveryNo() { + return deliveryNo; + } + + public void setDeliveryNo(String deliveryNo) { + this.deliveryNo = deliveryNo; + } + + public int getActualfee() { + return actualfee; + } + + public void setActualfee(int actualfee) { + this.actualfee = actualfee; + } + + public int getDeductfee() { + return deductfee; + } + + public void setDeductfee(int deductfee) { + this.deductfee = deductfee; + } + + public long getCreateTime() { + return createTime; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } + + public long getAcceptTime() { + return acceptTime; + } + + public void setAcceptTime(long acceptTime) { + this.acceptTime = acceptTime; + } + + public long getFetchTime() { + return fetchTime; + } + + public void setFetchTime(long fetchTime) { + this.fetchTime = fetchTime; + } + + public long getFinishTime() { + return finishTime; + } + + public void setFinishTime(long finishTime) { + this.finishTime = finishTime; + } + + public long getCancelTime() { + return cancelTime; + } + + public void setCancelTime(long cancelTime) { + this.cancelTime = cancelTime; + } + + public long getExpectedFinishTime() { + return expectedFinishTime; + } + + public void setExpectedFinishTime(long expectedFinishTime) { + this.expectedFinishTime = expectedFinishTime; + } + + public String getFetchCode() { + return fetchCode; + } + + public void setFetchCode(String fetchCode) { + this.fetchCode = fetchCode; + } + + public String getRecvCode() { + return recvCode; + } + + public void setRecvCode(String recvCode) { + this.recvCode = recvCode; + } + + public TransporterInfo getTransporterInfo() { + return transporterInfo; + } + + public void setTransporterInfo(TransporterInfo transporterInfo) { + this.transporterInfo = transporterInfo; + } + + public StoreInfo getStoreInfo() { + return storeInfo; + } + + public void setStoreInfo(StoreInfo storeInfo) { + this.storeInfo = storeInfo; + } + + public ReceiverInfo getReceiverInfo() { + return receiverInfo; + } + + public void setReceiverInfo(ReceiverInfo receiverInfo) { + this.receiverInfo = receiverInfo; + } + + public Cargo getCargoInfo() { + return cargoInfo; + } + + public void setCargoInfo(Cargo cargoInfo) { + this.cargoInfo = cargoInfo; + } + + public Date getCreateDate() { + return createTime == 0 ? null : new Date(createTime * 1000); + } + + public Date getAcceptDate() { + return acceptTime == 0 ? null : new Date(acceptTime * 1000); + } + + public Date getFetchDate() { + return fetchTime == 0 ? null : new Date(fetchTime * 1000); + } + + public Date getFinishDate() { + return finishTime == 0 ? null : new Date(finishTime * 1000); + } + + public Date getCancelDate() { + return cancelTime == 0 ? null : new Date(cancelTime * 1000); + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + public static class TransporterInfo { + private String transporterName; + private String transporterPhone; + + public String getTransporterName() { + return transporterName; + } + + public void setTransporterName(String transporterName) { + this.transporterName = transporterName; + } + + public String getTransporterPhone() { + return transporterPhone; + } + + public void setTransporterPhone(String transporterPhone) { + this.transporterPhone = transporterPhone; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } + + public static class StoreInfo { + private String storeName; + private String wxStoreId; + private String address; + private double lng; + private double lat; + private String phoneNum; + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public String getWxStoreId() { + return wxStoreId; + } + + public void setWxStoreId(String wxStoreId) { + this.wxStoreId = wxStoreId; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public String getPhoneNum() { + return phoneNum; + } + + public void setPhoneNum(String phoneNum) { + this.phoneNum = phoneNum; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } + + public static class ReceiverInfo { + private String receiverName; + private String address; + private String phoneNum; + private double lng; + private double lat; + + public String getReceiverName() { + return receiverName; + } + + public void setReceiverName(String receiverName) { + this.receiverName = receiverName; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getPhoneNum() { + return phoneNum; + } + + public void setPhoneNum(String phoneNum) { + this.phoneNum = phoneNum; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaPreAddOrderRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaPreAddOrderRequest.java new file mode 100644 index 0000000000..88c7fbd5ad --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaPreAddOrderRequest.java @@ -0,0 +1,22 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class WxMaPreAddOrderRequest extends BasicWxMaOrder { + private Cargo cargo; + + public Cargo getCargo() { + return cargo; + } + + public void setCargo(Cargo cargo) { + this.cargo = cargo; + } + + public static class Cargo extends BasicWxMaOrder.Cargo {} + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaQueryFlowRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaQueryFlowRequest.java new file mode 100644 index 0000000000..545be89ae1 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaQueryFlowRequest.java @@ -0,0 +1,88 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import java.util.Date; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WxMaQueryFlowRequest { + private static final Logger logger = LoggerFactory.getLogger(WxMaQueryFlowRequest.class); + + private String wxStoreId; + + /** 流水类型: 1:充值流水, 2:消费流水,3:退款流水 */ + private int flowType = 1; + + /** 运力ID */ + private String serviceTransId; + + private transient Date beginDate; + private transient Date endDate; + private long beginTime; + private long endTime; + + public String getWxStoreId() { + return wxStoreId; + } + + public void setWxStoreId(String wxStoreId) { + this.wxStoreId = wxStoreId; + } + + public int getFlowType() { + return flowType; + } + + public void setFlowType(int flowType) { + this.flowType = flowType; + } + + public String getServiceTransId() { + return serviceTransId; + } + + public void setServiceTransId(String serviceTransId) { + this.serviceTransId = serviceTransId; + } + + public Date getBeginDate() { + return beginDate; + } + + public void setBeginDate(Date beginDate) { + this.beginDate = beginDate; + this.beginTime = beginDate.getTime() / 1000; + } + + public Date getEndDate() { + return endDate; + } + + public void setEndDate(Date endDate) { + this.endDate = endDate; + this.endTime = endDate.getTime() / 1000; + } + + public long getBeginTime() { + return beginTime; + } + + public void setBeginTime(long beginTime) { + this.beginTime = beginTime; + this.beginDate = new Date(beginTime * 1000); + } + + public long getEndTime() { + return endTime; + } + + public void setEndTime(long endTime) { + this.endTime = endTime; + this.endDate = new Date(endTime * 1000); + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStore.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStore.java new file mode 100644 index 0000000000..958b078e58 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStore.java @@ -0,0 +1,187 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WxMaStore { + private static final Logger logger = LoggerFactory.getLogger(WxMaStore.class); + + /** 微信分配的ID,创建时不用填写,查询时返回,根据此ID下单等 */ + private String wxStoreId; + + /** 自己设置的门店ID,创建时填写,查询时返回,不可修改 */ + private String outStoreId; + + /** 门店名称,创建时需要,可修改;查询结果微信不返回此字段 */ + private String storeName; + + /** 创建时不用设置,查询时返回,微信自动设置 */ + private String cityId; + + /** 1:价格优先,2:运力优先 */ + private int orderPattern = 1; + + /** + * 运力优先时优先使用的运力。运力ID请参考:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/express/business/intracity_service.html#_6-%E8%BF%90%E5%8A%9B%E5%88%97%E8%A1%A8 + */ + private String ServiceTransPrefer; + + private AddressInfo addressInfo; + + public String getWxStoreId() { + return wxStoreId; + } + + public void setWxStoreId(String wxStoreId) { + this.wxStoreId = wxStoreId; + } + + public String getOutStoreId() { + return outStoreId; + } + + public void setOutStoreId(String outStoreId) { + this.outStoreId = outStoreId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public String getCityId() { + return cityId; + } + + public void setCityId(String cityId) { + this.cityId = cityId; + } + + public int getOrderPattern() { + return orderPattern; + } + + public void setOrderPattern(int orderPattern) { + this.orderPattern = orderPattern; + } + + public String getServiceTransPrefer() { + return ServiceTransPrefer; + } + + public void setServiceTransPrefer(String serviceTransPrefer) { + ServiceTransPrefer = serviceTransPrefer; + } + + public AddressInfo getAddressInfo() { + return addressInfo; + } + + public void setAddressInfo(AddressInfo addressInfo) { + this.addressInfo = addressInfo; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + public static class AddressInfo { + /** 省、自治区、直辖市 必填 */ + private String province; + + /** 地级市 必填 */ + private String city; + + /** 区/县/县级市 必填 */ + private String area; + + /** 街道/镇 选填 */ + private String street; + + /** 路名和门牌号 必填 */ + private String house; + + /** 门店电话号码 必填 */ + private String phone; + + /** 纬度 必填 */ + private double lat; + + /** 经度 必填 */ + private double lng; + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getHouse() { + return house; + } + + public void setHouse(String house) { + this.house = house; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLng() { + return lng; + } + + public void setLng(double lng) { + this.lng = lng; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreBalance.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreBalance.java new file mode 100644 index 0000000000..783c76fcd2 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreBalance.java @@ -0,0 +1,115 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import java.util.Date; +import java.util.List; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WxMaStoreBalance { + private static final Logger logger = LoggerFactory.getLogger(WxMaStoreBalance.class); + + private String wxStoreId; + private String appid; + private int allBalance; + + private List balanceDetail; + + public String getWxStoreId() { + return wxStoreId; + } + + public void setWxStoreId(String wxStoreId) { + this.wxStoreId = wxStoreId; + } + + public String getAppid() { + return appid; + } + + public void setAppid(String appid) { + this.appid = appid; + } + + public int getAllBalance() { + return allBalance; + } + + public void setAllBalance(int allBalance) { + this.allBalance = allBalance; + } + + public List getBalanceDetail() { + return balanceDetail; + } + + public void setBalanceDetail(List balanceDetail) { + this.balanceDetail = balanceDetail; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + public static class Detail { + private String payorderId; + private int chargeAmt; + private int unusedAmt; + private long beginTime; + private long endTime; + + public String getPayorderId() { + return payorderId; + } + + public void setPayorderId(String payorderId) { + this.payorderId = payorderId; + } + + public int getChargeAmt() { + return chargeAmt; + } + + public void setChargeAmt(int chargeAmt) { + this.chargeAmt = chargeAmt; + } + + public int getUnusedAmt() { + return unusedAmt; + } + + public void setUnusedAmt(int unusedAmt) { + this.unusedAmt = unusedAmt; + } + + public Date getBeginDate() { + return this.beginTime == 0 ? null : new Date(this.beginTime * 1000); + } + + public Date getEndDate() { + return this.endTime == 0 ? null : new Date(this.endTime * 1000); + } + + public long getBeginTime() { + return beginTime; + } + + public void setBeginTime(long beginTime) { + this.beginTime = beginTime; + } + + public long getEndTime() { + return endTime; + } + + public void setEndTime(long endTime) { + this.endTime = endTime; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreChargeRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreChargeRequest.java new file mode 100644 index 0000000000..2f320995fd --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreChargeRequest.java @@ -0,0 +1,22 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class WxMaStoreChargeRequest extends BasicWxMaStoreChargeRefundRequest { + + /** 充值金额 单位:分, 50元起充 */ + private int amount; + + public int getAmount() { + return amount; + } + + public void setAmount(int amount) { + this.amount = amount; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreFlowResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreFlowResponse.java new file mode 100644 index 0000000000..af5769aa5e --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreFlowResponse.java @@ -0,0 +1,318 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import java.util.Date; +import java.util.List; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WxMaStoreFlowResponse { + private static final Logger logger = LoggerFactory.getLogger(WxMaStoreFlowResponse.class); + + /** 总支付金额 */ + private Long totalPayAmt; + + /** 总退款金额 */ + private Long totalRefundAmt; + + /** 总违约金 查询消费流水才返回 */ + private Long totalDeductAmt; + + /** 流水 */ + private List flowList; + + public List getFlowList() { + return flowList; + } + + public void setFlowList(List flowList) { + this.flowList = flowList; + } + + public Long getTotalPayAmt() { + return totalPayAmt; + } + + public void setTotalPayAmt(Long totalPayAmt) { + this.totalPayAmt = totalPayAmt; + } + + public Long getTotalRefundAmt() { + return totalRefundAmt; + } + + public void setTotalRefundAmt(Long totalRefundAmt) { + this.totalRefundAmt = totalRefundAmt; + } + + public Long getTotalDeductAmt() { + return totalDeductAmt; + } + + public void setTotalDeductAmt(Long totalDeductAmt) { + this.totalDeductAmt = totalDeductAmt; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + public static class BasicFlowRecord { + private int flowType; + private String appid; + private String wxStoreId; + private String payOrderId; + private String serviceTransId; + private int payAmount; + private long payTime; + private long createTime; + + public int getFlowType() { + return flowType; + } + + public void setFlowType(int flowType) { + this.flowType = flowType; + } + + public String getAppid() { + return appid; + } + + public void setAppid(String appid) { + this.appid = appid; + } + + public String getWxStoreId() { + return wxStoreId; + } + + public void setWxStoreId(String wxStoreId) { + this.wxStoreId = wxStoreId; + } + + public String getPayOrderId() { + return payOrderId; + } + + public void setPayOrderId(String payOrderId) { + this.payOrderId = payOrderId; + } + + public String getServiceTransId() { + return serviceTransId; + } + + public void setServiceTransId(String serviceTransId) { + this.serviceTransId = serviceTransId; + } + + public int getPayAmount() { + return payAmount; + } + + public void setPayAmount(int payAmount) { + this.payAmount = payAmount; + } + + public Date getPayDate() { + return this.payTime == 0 ? null : new Date(this.payTime * 1000); + } + + public long getPayTime() { + return payTime; + } + + public void setPayTime(long payTime) { + this.payTime = payTime; + } + + public Date getCreateDate() { + return this.createTime == 0 ? null : new Date(this.createTime * 1000); + } + + public long getCreateTime() { + return createTime; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } + + /** 充值流水 */ + public static class ChargeFlowRecord extends BasicFlowRecord { + private String payStatus; + + private long consumeDeadline; + + public String getPayStatus() { + return payStatus; + } + + public void setPayStatus(String payStatus) { + this.payStatus = payStatus; + } + + public Date getConsumeDeadlineDate() { + return this.consumeDeadline == 0 ? null : new Date(this.consumeDeadline * 1000); + } + + public long getConsumeDeadline() { + return consumeDeadline; + } + + public void setConsumeDeadline(long consumeDeadline) { + this.consumeDeadline = consumeDeadline; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } + + /** 退款流水 */ + public static class RefundFlowRecord extends BasicFlowRecord { + private int refundAmount; + private long refundTime; + private long consumeDeadline; + + public int getRefundAmount() { + return refundAmount; + } + + public void setRefundAmount(int refundAmount) { + this.refundAmount = refundAmount; + } + + public Date getRefundDate() { + return this.refundTime == 0 ? null : new Date(this.refundTime * 1000); + } + + public long getRefundTime() { + return refundTime; + } + + public void setRefundTime(long refundTime) { + this.refundTime = refundTime; + } + + public Date getConsumeDeadlineDate() { + return this.consumeDeadline == 0 ? null : new Date(this.consumeDeadline * 1000); + } + + public long getConsumeDeadline() { + return consumeDeadline; + } + + public void setConsumeDeadline(long consumeDeadline) { + this.consumeDeadline = consumeDeadline; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } + + /** 消费流水 */ + public static class ConsumeFlowRecord extends BasicFlowRecord { + private String wxOrderId; + private String openid; + private String deliveryStatus; + private String payStatus; + private String refundStatus; + private int refundAmount; + private int deductAmount; + private String billId; + private long deliveryFinishedTime; + + public String getWxOrderId() { + return wxOrderId; + } + + public void setWxOrderId(String wxOrderId) { + this.wxOrderId = wxOrderId; + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public String getDeliveryStatus() { + return deliveryStatus; + } + + public void setDeliveryStatus(String deliveryStatus) { + this.deliveryStatus = deliveryStatus; + } + + public String getPayStatus() { + return payStatus; + } + + public void setPayStatus(String payStatus) { + this.payStatus = payStatus; + } + + public String getRefundStatus() { + return refundStatus; + } + + public void setRefundStatus(String refundStatus) { + this.refundStatus = refundStatus; + } + + public int getRefundAmount() { + return refundAmount; + } + + public void setRefundAmount(int refundAmount) { + this.refundAmount = refundAmount; + } + + public int getDeductAmount() { + return deductAmount; + } + + public void setDeductAmount(int deductAmount) { + this.deductAmount = deductAmount; + } + + public String getBillId() { + return billId; + } + + public void setBillId(String billId) { + this.billId = billId; + } + + public Date getDeliveryFinishedDate() { + return this.deliveryFinishedTime == 0 ? null : new Date(this.deliveryFinishedTime * 1000); + } + + public long getDeliveryFinishedTime() { + return deliveryFinishedTime; + } + + public void setDeliveryFinishedTime(long deliveryFinishedTime) { + this.deliveryFinishedTime = deliveryFinishedTime; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreRefundRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreRefundRequest.java new file mode 100644 index 0000000000..cb4ebec3af --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreRefundRequest.java @@ -0,0 +1,11 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class WxMaStoreRefundRequest extends BasicWxMaStoreChargeRefundRequest { + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaTransCity.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaTransCity.java new file mode 100644 index 0000000000..ff125447fc --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaTransCity.java @@ -0,0 +1,56 @@ +package cn.binarywang.wx.miniapp.bean.intractiy; + +import java.util.List; +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class WxMaTransCity { + private String serviceTransId; + private List cityList; + + public String getServiceTransId() { + return serviceTransId; + } + + public void setServiceTransId(String serviceTransId) { + this.serviceTransId = serviceTransId; + } + + public List getCityList() { + return cityList; + } + + public void setCityList(List cityList) { + this.cityList = cityList; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + public static class City { + private String cityName; + private String cityCode; + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public String getCityCode() { + return cityCode; + } + + public void setCityCode(String cityCode) { + this.cityCode = cityCode; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java index 12e1da07b9..ba71b931cc 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java @@ -1,12 +1,11 @@ package cn.binarywang.wx.miniapp.config; +import java.util.concurrent.locks.Lock; +import java.util.function.Consumer; import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.bean.WxAccessTokenEntity; import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; -import java.util.concurrent.locks.Lock; -import java.util.function.Consumer; - /** * 小程序配置 * @@ -14,9 +13,7 @@ */ public interface WxMaConfig { - default void setUpdateAccessTokenBefore(Consumer updateAccessTokenBefore) { - - } + default void setUpdateAccessTokenBefore(Consumer updateAccessTokenBefore) {} /** * Gets access token. @@ -25,12 +22,12 @@ default void setUpdateAccessTokenBefore(Consumer updateAcce */ String getAccessToken(); - //region 稳定版access token + // region 稳定版access token boolean isStableAccessToken(); void useStableAccessToken(boolean useStableAccessToken); - //endregion + // endregion /** * Gets access token lock. @@ -46,9 +43,7 @@ default void setUpdateAccessTokenBefore(Consumer updateAcce */ boolean isAccessTokenExpired(); - /** - * 强制将access token过期掉 - */ + /** 强制将access token过期掉 */ void expireAccessToken(); /** @@ -63,7 +58,7 @@ default void updateAccessToken(WxAccessToken accessToken) { /** * 应该是线程安全的 * - * @param accessToken 新的accessToken值 + * @param accessToken 新的accessToken值 * @param expiresInSeconds 过期时间,以秒为单位 */ void updateAccessToken(String accessToken, int expiresInSeconds); @@ -77,10 +72,7 @@ default void updateAccessTokenProcessor(String accessToken, int expiresInSeconds updateAccessToken(accessToken, expiresInSeconds); } - default void updateAccessTokenBefore(WxAccessTokenEntity wxAccessTokenEntity) { - - } - + default void updateAccessTokenBefore(WxAccessTokenEntity wxAccessTokenEntity) {} /** * Gets jsapi ticket. @@ -103,15 +95,13 @@ default void updateAccessTokenBefore(WxAccessTokenEntity wxAccessTokenEntity) { */ boolean isJsapiTicketExpired(); - /** - * 强制将jsapi ticket过期掉 - */ + /** 强制将jsapi ticket过期掉 */ void expireJsapiTicket(); /** * 应该是线程安全的 * - * @param jsapiTicket 新的jsapi ticket值 + * @param jsapiTicket 新的jsapi ticket值 * @param expiresInSeconds 过期时间,以秒为单位 */ void updateJsapiTicket(String jsapiTicket, int expiresInSeconds); @@ -137,15 +127,13 @@ default void updateAccessTokenBefore(WxAccessTokenEntity wxAccessTokenEntity) { */ boolean isCardApiTicketExpired(); - /** - * 强制将卡券api ticket过期掉. - */ + /** 强制将卡券api ticket过期掉. */ void expireCardApiTicket(); /** * 应该是线程安全的. * - * @param apiTicket 新的卡券api ticket值 + * @param apiTicket 新的卡券api ticket值 * @param expiresInSeconds 过期时间,以秒为单位 */ void updateCardApiTicket(String apiTicket, int expiresInSeconds); @@ -236,6 +224,7 @@ default void updateAccessTokenBefore(WxAccessTokenEntity wxAccessTokenEntity) { /** * http 请求重试间隔 + * *
    *   {@link cn.binarywang.wx.miniapp.api.impl.BaseWxMaServiceImpl#setRetrySleepMillis(int)}
    * 
@@ -244,6 +233,7 @@ default void updateAccessTokenBefore(WxAccessTokenEntity wxAccessTokenEntity) { /** * http 请求最大重试次数 + * *
    *   {@link cn.binarywang.wx.miniapp.api.impl.BaseWxMaServiceImpl#setMaxRetryTimes(int)}
    * 
@@ -288,10 +278,35 @@ default void updateAccessTokenBefore(WxAccessTokenEntity wxAccessTokenEntity) { String getAccessTokenUrl(); /** - * 设置自定义的获取accessToken地址 - * 可用于设置获取accessToken的自定义服务 + * 设置自定义的获取accessToken地址 可用于设置获取accessToken的自定义服务 * * @param accessTokenUrl 自定义的获取accessToken地址 */ void setAccessTokenUrl(String accessTokenUrl); + + /** + * 服务端API签名用到的RSA私钥【pkcs8格式,会以 -----BEGIN PRIVATE KEY-----开头, 'BEGIN RSA PRIVATE + * KEY'的是pkcs1格式,需要转换(可用openssl转换)。 设置参考: + * https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/getting_started/api_signature.html + * + * @return rsa private key string + */ + String getApiSignatureRsaPrivateKey(); + + /** + * 服务端API签名用到的AES密钥 + * https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/getting_started/api_signature.html + * + * @return aes key string + */ + String getApiSignatureAesKey(); + + /** 密钥对应的序号 */ + String getApiSignatureAesKeySn(); + + /** 密钥对应的序号 */ + String getApiSignatureRsaPrivateKeySn(); + + /** 密钥对应的小程序ID (普通小程序同 appId, 托管第三方平台的是 componentAppId) */ + String getWechatMpAppid(); } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java index bd9a4e20b0..ab82d6209e 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java @@ -2,17 +2,16 @@ import cn.binarywang.wx.miniapp.config.WxMaConfig; import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder; +import java.io.File; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.function.Consumer; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import me.chanjar.weixin.common.bean.WxAccessTokenEntity; import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; -import java.io.File; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; -import java.util.function.Consumer; - /** * 基于内存的微信配置provider,在实际生产环境中应该将这些配置持久化 * @@ -23,30 +22,32 @@ public class WxMaDefaultConfigImpl implements WxMaConfig { protected volatile String appid; protected volatile String token; - /** - * 是否使用稳定版获取accessToken接口 - */ + /** 是否使用稳定版获取accessToken接口 */ @Getter(value = AccessLevel.NONE) private boolean useStableAccessToken; - /** - * 小程序原始ID - */ + /** 小程序原始ID */ protected volatile String originalId; + protected Lock accessTokenLock = new ReentrantLock(); - /** - * 临时文件目录. - */ + + /** 临时文件目录. */ protected volatile File tmpDirFile; + private volatile String msgDataFormat; private volatile String secret; private volatile String accessToken; private volatile String aesKey; private volatile long expiresTime; - /** - * 云环境ID - */ + private volatile String apiSignatureRsaPrivateKey; + private volatile String apiSignatureAesKey; + private volatile String apiSignatureRsaPrivateKeySn; + private volatile String apiSignatureAesKeySn; + private volatile String wechatMpAppid; + + /** 云环境ID */ private volatile String cloudEnv; + private volatile String httpProxyHost; private volatile int httpProxyPort; private volatile String httpProxyUsername; @@ -57,10 +58,10 @@ public class WxMaDefaultConfigImpl implements WxMaConfig { private volatile String jsapiTicket; private volatile long jsapiTicketExpiresTime; - /** - * 微信卡券的ticket单独缓存. - */ + + /** 微信卡券的ticket单独缓存. */ private volatile String cardApiTicket; + private volatile long cardApiTicketExpiresTime; protected volatile Lock jsapiTicketLock = new ReentrantLock(); protected volatile Lock cardApiTicketLock = new ReentrantLock(); @@ -68,35 +69,24 @@ public class WxMaDefaultConfigImpl implements WxMaConfig { private String apiHostUrl; private String accessTokenUrl; - /** - * 自定义配置token的消费者 - */ - @Setter - private Consumer updateAccessTokenBefore; + /** 自定义配置token的消费者 */ + @Setter private Consumer updateAccessTokenBefore; - /** - * 开启回调 - */ + /** 开启回调 */ @Getter(AccessLevel.NONE) private boolean enableUpdateAccessTokenBefore = true; - /** - * 可临时关闭更新token回调,主要用于其他介质初始化数据时,可不进行回调 - */ + /** 可临时关闭更新token回调,主要用于其他介质初始化数据时,可不进行回调 */ public void enableUpdateAccessTokenBefore(boolean enableUpdateAccessTokenBefore) { this.enableUpdateAccessTokenBefore = enableUpdateAccessTokenBefore; } - /** - * 会过期的数据提前过期时间,默认预留200秒的时间 - */ + /** 会过期的数据提前过期时间,默认预留200秒的时间 */ protected long expiresAheadInMillis(int expiresInSeconds) { return System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L; } - /** - * 判断 expiresTime 是否已经过期 - */ + /** 判断 expiresTime 是否已经过期 */ protected boolean isExpired(long expiresTime) { return System.currentTimeMillis() > expiresTime; } @@ -110,7 +100,7 @@ public void setAccessToken(String accessToken) { this.accessToken = accessToken; } - //region 使用稳定版接口获取accessToken + // region 使用稳定版接口获取accessToken @Override public boolean isStableAccessToken() { return this.useStableAccessToken; @@ -120,8 +110,8 @@ public boolean isStableAccessToken() { public void useStableAccessToken(boolean useStableAccessToken) { this.useStableAccessToken = useStableAccessToken; } - //endregion + // endregion @Override public Lock getAccessTokenLock() { @@ -137,10 +127,10 @@ public boolean isAccessTokenExpired() { return isExpired(this.expiresTime); } -// @Override -// public synchronized void updateAccessToken(WxAccessToken accessToken) { -// updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); -// } + // @Override + // public synchronized void updateAccessToken(WxAccessToken accessToken) { + // updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); + // } @Override public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { @@ -248,6 +238,46 @@ public void setAesKey(String aesKey) { this.aesKey = aesKey; } + public String getApiSignatureRsaPrivateKey() { + return apiSignatureRsaPrivateKey; + } + + public void setApiSignatureRsaPrivateKey(String apiSignatureRsaPrivateKey) { + this.apiSignatureRsaPrivateKey = apiSignatureRsaPrivateKey; + } + + public String getApiSignatureAesKey() { + return apiSignatureAesKey; + } + + public void setApiSignatureAesKey(String apiSignatureAesKey) { + this.apiSignatureAesKey = apiSignatureAesKey; + } + + public String getApiSignatureRsaPrivateKeySn() { + return apiSignatureRsaPrivateKeySn; + } + + public void setApiSignatureRsaPrivateKeySn(String apiSignatureRsaPrivateKeySn) { + this.apiSignatureRsaPrivateKeySn = apiSignatureRsaPrivateKeySn; + } + + public String getApiSignatureAesKeySn() { + return apiSignatureAesKeySn; + } + + public void setApiSignatureAesKeySn(String apiSignatureAesKeySn) { + this.apiSignatureAesKeySn = apiSignatureAesKeySn; + } + + public String getWechatMpAppid() { + return wechatMpAppid == null ? appid : wechatMpAppid; + } + + public void setWechatMpAppid(String wechatMpAppid) { + this.wechatMpAppid = wechatMpAppid; + } + @Override public String getOriginalId() { return originalId; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java index f1bc84ad72..ab47d3e64d 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java @@ -5,58 +5,62 @@ /** * 小程序接口地址常量. * - * @author Binary Wang - * created on 2021-01-28 + * @author Binary Wang created on 2021-01-28 */ @UtilityClass public class WxMaApiUrlConstants { - /** - * openApi管理 - */ + /** openApi管理 */ public interface OpenApi { - /** - * 重置API调用次数 - */ + /** 重置API调用次数 */ String CLEAR_QUOTA = "https://api.weixin.qq.com/cgi-bin/clear_quota"; - /** - * 查询API调用额度 - */ + + /** 查询API调用额度 */ String GET_API_QUOTA = "https://api.weixin.qq.com/cgi-bin/openapi/quota/get"; - /** - * 查询rid信息 - */ + + /** 查询rid信息 */ String GET_RID_INFO = "https://api.weixin.qq.com/cgi-bin/openapi/rid/get"; - /** - * 使用AppSecret重置 API 调用次数 - */ - String CLEAR_QUOTA_BY_APP_SECRET = "https://api.weixin.qq.com/cgi-bin/clear_quota/v2?appid=%s&appsecret=%s"; + /** 使用AppSecret重置 API 调用次数 */ + String CLEAR_QUOTA_BY_APP_SECRET = + "https://api.weixin.qq.com/cgi-bin/clear_quota/v2?appid=%s&appsecret=%s"; } public interface Analysis { - String GET_DAILY_SUMMARY_TREND_URL = "https://api.weixin.qq.com/datacube/getweanalysisappiddailysummarytrend"; - String GET_DAILY_VISIT_TREND_URL = "https://api.weixin.qq.com/datacube/getweanalysisappiddailyvisittrend"; - String GET_WEEKLY_VISIT_TREND_URL = "https://api.weixin.qq.com/datacube/getweanalysisappidweeklyvisittrend"; - String GET_MONTHLY_VISIT_TREND_URL = "https://api.weixin.qq.com/datacube/getweanalysisappidmonthlyvisittrend"; - String GET_VISIT_DISTRIBUTION_URL = "https://api.weixin.qq.com/datacube/getweanalysisappidvisitdistribution"; - String GET_DAILY_RETAIN_INFO_URL = "https://api.weixin.qq.com/datacube/getweanalysisappiddailyretaininfo"; - String GET_WEEKLY_RETAIN_INFO_URL = "https://api.weixin.qq.com/datacube/getweanalysisappidweeklyretaininfo"; - String GET_MONTHLY_RETAIN_INFO_URL = "https://api.weixin.qq.com/datacube/getweanalysisappidmonthlyretaininfo"; + String GET_DAILY_SUMMARY_TREND_URL = + "https://api.weixin.qq.com/datacube/getweanalysisappiddailysummarytrend"; + String GET_DAILY_VISIT_TREND_URL = + "https://api.weixin.qq.com/datacube/getweanalysisappiddailyvisittrend"; + String GET_WEEKLY_VISIT_TREND_URL = + "https://api.weixin.qq.com/datacube/getweanalysisappidweeklyvisittrend"; + String GET_MONTHLY_VISIT_TREND_URL = + "https://api.weixin.qq.com/datacube/getweanalysisappidmonthlyvisittrend"; + String GET_VISIT_DISTRIBUTION_URL = + "https://api.weixin.qq.com/datacube/getweanalysisappidvisitdistribution"; + String GET_DAILY_RETAIN_INFO_URL = + "https://api.weixin.qq.com/datacube/getweanalysisappiddailyretaininfo"; + String GET_WEEKLY_RETAIN_INFO_URL = + "https://api.weixin.qq.com/datacube/getweanalysisappidweeklyretaininfo"; + String GET_MONTHLY_RETAIN_INFO_URL = + "https://api.weixin.qq.com/datacube/getweanalysisappidmonthlyretaininfo"; String GET_VISIT_PAGE_URL = "https://api.weixin.qq.com/datacube/getweanalysisappidvisitpage"; - String GET_USER_PORTRAIT_URL = "https://api.weixin.qq.com/datacube/getweanalysisappiduserportrait"; + String GET_USER_PORTRAIT_URL = + "https://api.weixin.qq.com/datacube/getweanalysisappiduserportrait"; } public interface Cloud { - String INVOKE_CLOUD_FUNCTION_URL = "https://api.weixin.qq.com/tcb/invokecloudfunction?env=%s&name=%s"; + String INVOKE_CLOUD_FUNCTION_URL = + "https://api.weixin.qq.com/tcb/invokecloudfunction?env=%s&name=%s"; String DATABASE_COLLECTION_GET_URL = "https://api.weixin.qq.com/tcb/databasecollectionget"; - String DATABASE_COLLECTION_DELETE_URL = "https://api.weixin.qq.com/tcb/databasecollectiondelete"; + String DATABASE_COLLECTION_DELETE_URL = + "https://api.weixin.qq.com/tcb/databasecollectiondelete"; String DATABASE_COLLECTION_ADD_URL = "https://api.weixin.qq.com/tcb/databasecollectionadd"; String GET_QCLOUD_TOKEN_URL = "https://api.weixin.qq.com/tcb/getqcloudtoken"; String BATCH_DELETE_FILE_URL = "https://api.weixin.qq.com/tcb/batchdeletefile"; String BATCH_DOWNLOAD_FILE_URL = "https://api.weixin.qq.com/tcb/batchdownloadfile"; String UPLOAD_FILE_URL = "https://api.weixin.qq.com/tcb/uploadfile"; - String DATABASE_MIGRATE_QUERY_INFO_URL = "https://api.weixin.qq.com/tcb/databasemigratequeryinfo"; + String DATABASE_MIGRATE_QUERY_INFO_URL = + "https://api.weixin.qq.com/tcb/databasemigratequeryinfo"; String DATABASE_MIGRATE_EXPORT_URL = "https://api.weixin.qq.com/tcb/databasemigrateexport"; String DATABASE_MIGRATE_IMPORT_URL = "https://api.weixin.qq.com/tcb/databasemigrateimport"; String UPDATE_INDEX_URL = "https://api.weixin.qq.com/tcb/updateindex"; @@ -73,16 +77,18 @@ public interface Msg { String KEFU_MESSAGE_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/custom/send"; String TEMPLATE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send"; String SUBSCRIBE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send"; - String UNIFORM_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send"; - String ACTIVITY_ID_CREATE_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create"; - String UPDATABLE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/updatablemsg/send"; + String UNIFORM_MSG_SEND_URL = + "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send"; + String ACTIVITY_ID_CREATE_URL = + "https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create"; + String UPDATABLE_MSG_SEND_URL = + "https://api.weixin.qq.com/cgi-bin/message/wxopen/updatablemsg/send"; } public interface Code { - /** - * 为授权的小程序帐号上传小程序代码. - */ + /** 为授权的小程序帐号上传小程序代码. */ String COMMIT_URL = "https://api.weixin.qq.com/wxa/commit"; + String GET_QRCODE_URL = "https://api.weixin.qq.com/wxa/get_qrcode"; String GET_CATEGORY_URL = "https://api.weixin.qq.com/wxa/get_category"; String GET_PAGE_URL = "https://api.weixin.qq.com/wxa/get_page"; @@ -92,204 +98,158 @@ public interface Code { String RELEASE_URL = "https://api.weixin.qq.com/wxa/release"; String CHANGE_VISIT_STATUS_URL = "https://api.weixin.qq.com/wxa/change_visitstatus"; String REVERT_CODE_RELEASE_URL = "https://api.weixin.qq.com/wxa/revertcoderelease"; - String GET_SUPPORT_VERSION_URL = "https://api.weixin.qq.com/cgi-bin/wxopen/getweappsupportversion"; - String SET_SUPPORT_VERSION_URL = "https://api.weixin.qq.com/cgi-bin/wxopen/setweappsupportversion"; + String GET_SUPPORT_VERSION_URL = + "https://api.weixin.qq.com/cgi-bin/wxopen/getweappsupportversion"; + String SET_SUPPORT_VERSION_URL = + "https://api.weixin.qq.com/cgi-bin/wxopen/setweappsupportversion"; String UNDO_CODE_AUDIT_URL = "https://api.weixin.qq.com/wxa/undocodeaudit"; String GET_VERSION_INFO_URL = "https://api.weixin.qq.com/wxa/getversioninfo"; } public interface Express { - /** - * 获取支持的快递公司列表 - */ + /** 获取支持的快递公司列表 */ String ALL_DELIVERY_URL = "https://api.weixin.qq.com/cgi-bin/express/business/delivery/getall"; - /** - * 获取所有绑定的物流账号 - */ + + /** 获取所有绑定的物流账号 */ String ALL_ACCOUNT_URL = "https://api.weixin.qq.com/cgi-bin/express/business/account/getall"; - /** - * 绑定、解绑物流账号 - */ + + /** 绑定、解绑物流账号 */ String BIND_ACCOUNT_URL = "https://api.weixin.qq.com/cgi-bin/express/business/account/bind"; - /** - * 获取电子面单余额 - */ + + /** 获取电子面单余额 */ String GET_QUOTA_URL = "https://api.weixin.qq.com/cgi-bin/express/business/quota/get"; - /** - * 配置面单打印员 - */ + + /** 配置面单打印员 */ String UPDATE_PRINTER_URL = "https://api.weixin.qq.com/cgi-bin/express/business/printer/update"; - /** - * 获取打印员 - */ + + /** 获取打印员 */ String GET_PRINTER_URL = "https://api.weixin.qq.com/cgi-bin/express/business/printer/getall"; - /** - * 生成运单 - */ + + /** 生成运单 */ String ADD_ORDER_URL = "https://api.weixin.qq.com/cgi-bin/express/business/order/add"; - /** - * 批量获取运单数据 - */ - String BATCH_GET_ORDER_URL = "https://api.weixin.qq.com/cgi-bin/express/business/order/batchget"; - /** - * 取消运单 - */ + + /** 批量获取运单数据 */ + String BATCH_GET_ORDER_URL = + "https://api.weixin.qq.com/cgi-bin/express/business/order/batchget"; + + /** 取消运单 */ String CANCEL_ORDER_URL = "https://api.weixin.qq.com/cgi-bin/express/business/order/cancel"; - /** - * 获取运单数据 - */ + + /** 获取运单数据 */ String GET_ORDER_URL = "https://api.weixin.qq.com/cgi-bin/express/business/order/get"; - /** - * 查询运单轨迹 - */ + + /** 查询运单轨迹 */ String GET_PATH_URL = "https://api.weixin.qq.com/cgi-bin/express/business/path/get"; - /** - * 模拟快递公司更新订单状态 - */ - String TEST_UPDATE_ORDER_URL = "https://api.weixin.qq.com/cgi-bin/express/business/test_update_order"; + + /** 模拟快递公司更新订单状态 */ + String TEST_UPDATE_ORDER_URL = + "https://api.weixin.qq.com/cgi-bin/express/business/test_update_order"; } public interface ImgProc { - /** - * 二维码/条码识别 - */ + /** 二维码/条码识别 */ String QRCODE = "https://api.weixin.qq.com/cv/img/qrcode?img_url=%s"; - /** - * 二维码/条码识别(文件) - */ + + /** 二维码/条码识别(文件) */ String FILE_QRCODE = "https://api.weixin.qq.com/cv/img/qrcode"; - /** - * 图片高清化 - */ + + /** 图片高清化 */ String SUPER_RESOLUTION = "https://api.weixin.qq.com/cv/img/superresolution?img_url=%s"; - /** - * 图片高清化(文件) - */ + + /** 图片高清化(文件) */ String FILE_SUPER_RESOLUTION = "https://api.weixin.qq.com/cv/img/superresolution"; - /** - * 图片智能裁剪 - */ + + /** 图片智能裁剪 */ String AI_CROP = "https://api.weixin.qq.com/cv/img/aicrop?img_url=%s&ratios=%s"; - /** - * 图片智能裁剪(文件) - */ + + /** 图片智能裁剪(文件) */ String FILE_AI_CROP = "https://api.weixin.qq.com/cv/img/aicrop?ratios=%s"; } public interface Jsapi { - /** - * 获得jsapi_ticket的url - */ + /** 获得jsapi_ticket的url */ String GET_JSAPI_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket"; } public interface Broadcast { - /** - * 直播间管理相关接口 - */ + /** 直播间管理相关接口 */ interface Room { - /** - * 创建直播间 - */ + /** 创建直播间 */ String CREATE_ROOM = "https://api.weixin.qq.com/wxaapi/broadcast/room/create"; - /** - * 获取直播间列表 - * 获取直播间回放 - */ + + /** 获取直播间列表 获取直播间回放 */ String GET_LIVE_INFO = "https://api.weixin.qq.com/wxa/business/getliveinfo"; - /** - * 直播间导入商品 - */ + + /** 直播间导入商品 */ String ADD_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/room/addgoods"; - /** - * 删除直播间 - */ + + /** 删除直播间 */ String DELETE_ROOM = "https://api.weixin.qq.com/wxaapi/broadcast/room/deleteroom"; - /** - * 编辑直播间 - */ + + /** 编辑直播间 */ String EDIT_ROOM = "https://api.weixin.qq.com/wxaapi/broadcast/room/editroom"; - /** - * 获取直播间推流地址 - */ + + /** 获取直播间推流地址 */ String GET_PUSH_URL = "https://api.weixin.qq.com/wxaapi/broadcast/room/getpushurl"; - /** - * 获取直播间分享二维码 - */ + + /** 获取直播间分享二维码 */ String GET_SHARED_CODE = "https://api.weixin.qq.com/wxaapi/broadcast/room/getsharedcode"; - /** - * 添加管理直播间小助手 - */ + + /** 添加管理直播间小助手 */ String ADD_ASSISTANT = "https://api.weixin.qq.com/wxaapi/broadcast/room/addassistant"; - /** - * 修改管理直播间小助手 - */ + + /** 修改管理直播间小助手 */ String MODIFY_ASSISTANT = "https://api.weixin.qq.com/wxaapi/broadcast/room/modifyassistant"; - /** - * 删除管理直播间小助手 - */ + + /** 删除管理直播间小助手 */ String REMOVE_ASSISTANT = "https://api.weixin.qq.com/wxaapi/broadcast/room/removeassistant"; - /** - * 查询管理直播间小助手 - */ - String GET_ASSISTANT_LIST = "https://api.weixin.qq.com/wxaapi/broadcast/room/getassistantlist"; - /** - * 添加主播副号 - */ + + /** 查询管理直播间小助手 */ + String GET_ASSISTANT_LIST = + "https://api.weixin.qq.com/wxaapi/broadcast/room/getassistantlist"; + + /** 添加主播副号 */ String ADD_SUBANCHOR = "https://api.weixin.qq.com/wxaapi/broadcast/room/addsubanchor"; - /** - * 修改主播副号 - */ + + /** 修改主播副号 */ String MODIFY_SUBANCHOR = "https://api.weixin.qq.com/wxaapi/broadcast/room/modifysubanchor"; - /** - * 删除主播副号 - */ + + /** 删除主播副号 */ String DELETE_SUBANCHOR = "https://api.weixin.qq.com/wxaapi/broadcast/room/deletesubanchor"; - /** - * 获取主播副号 - */ + + /** 获取主播副号 */ String GET_SUBANCHOR = "https://api.weixin.qq.com/wxaapi/broadcast/room/getsubanchor"; - /** - * 开启/关闭直播间官方收录 - */ - String UPDATE_FEED_PUBLIC = "https://api.weixin.qq.com/wxaapi/broadcast/room/updatefeedpublic"; - /** - * 开启/关闭回放功能 - */ + + /** 开启/关闭直播间官方收录 */ + String UPDATE_FEED_PUBLIC = + "https://api.weixin.qq.com/wxaapi/broadcast/room/updatefeedpublic"; + + /** 开启/关闭回放功能 */ String UPDATE_REPLAY = "https://api.weixin.qq.com/wxaapi/broadcast/room/updatereplay"; - /** - * 开启/关闭客服功能 - */ + + /** 开启/关闭客服功能 */ String UPDATE_KF = "https://api.weixin.qq.com/wxaapi/broadcast/room/updatekf"; - /** - * 开启/关闭直播间全局禁言 - */ + + /** 开启/关闭直播间全局禁言 */ String UPDATE_COMMENT = "https://api.weixin.qq.com/wxaapi/broadcast/room/updatecomment"; - /** - * 上下架商品 - */ + + /** 上下架商品 */ String ONSALE = "https://api.weixin.qq.com/wxaapi/broadcast/goods/onsale"; - /** - * 删除商品 - */ + + /** 删除商品 */ String DELETE_IN_ROOM = "https://api.weixin.qq.com/wxaapi/broadcast/goods/deleteInRoom"; - /** - * 推送商品 - */ + + /** 推送商品 */ String PUSH = "https://api.weixin.qq.com/wxaapi/broadcast/goods/push"; - /** - * 商品排序 - */ + + /** 商品排序 */ String SORT = "https://api.weixin.qq.com/wxaapi/broadcast/goods/sort"; - /** - * 下载商品讲解视频 - */ + + /** 下载商品讲解视频 */ String GET_VIDEO = "https://api.weixin.qq.com/wxaapi/broadcast/goods/getVideo"; } - /** - * 直播商品管理相关接口 - */ + /** 直播商品管理相关接口 */ interface Goods { String ADD_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add"; String RESET_AUDIT_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/resetaudit"; @@ -298,19 +258,15 @@ interface Goods { String UPDATE_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/update"; String GET_GOODS_WARE_HOUSE = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse"; String GET_APPROVED_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/getapproved"; - /** - * 直播挂件设置全局 Key - */ + + /** 直播挂件设置全局 Key */ String SET_KEY = "https://api.weixin.qq.com/wxaapi/broadcast/goods/setkey"; - /** - * 直播挂件获取全局 Key - */ + + /** 直播挂件获取全局 Key */ String GET_KEY = "https://api.weixin.qq.com/wxaapi/broadcast/goods/getkey"; } - /** - * 小程序直播成员管理接口 - */ + /** 小程序直播成员管理接口 */ interface Role { String ADD_ROLE = "https://api.weixin.qq.com/wxaapi/broadcast/role/addrole"; String DELETE_ROLE = "https://api.weixin.qq.com/wxaapi/broadcast/role/deleterole"; @@ -333,9 +289,7 @@ public interface Qrcode { String GET_WXACODE_UNLIMIT_URL = "https://api.weixin.qq.com/wxa/getwxacodeunlimit"; } - public interface Run { - - } + public interface Run {} public interface Scheme { String GENERATE_SCHEME_URL = "https://api.weixin.qq.com/wxa/generatescheme"; @@ -351,17 +305,13 @@ public interface ShortLink { String GENERATE_SHORT_LINK_URL = "https://api.weixin.qq.com/wxa/genwxashortlink"; } - /** - * 小程序安全 - */ + /** 小程序安全 */ public interface SecCheck { String IMG_SEC_CHECK_URL = "https://api.weixin.qq.com/wxa/img_sec_check"; String MSG_SEC_CHECK_URL = "https://api.weixin.qq.com/wxa/msg_sec_check"; String MEDIA_CHECK_ASYNC_URL = "https://api.weixin.qq.com/wxa/media_check_async"; - /** - * 获取用户安全等级 - */ + /** 获取用户安全等级 */ String GET_USER_RISK_RANK = "https://api.weixin.qq.com/wxa/getuserriskrank"; } @@ -371,52 +321,48 @@ public interface Setting { * access_token 为 authorizer_access_token */ String MODIFY_DOMAIN_URL = "https://api.weixin.qq.com/wxa/modify_domain"; + String SET_WEB_VIEW_DOMAIN_URL = "https://api.weixin.qq.com/wxa/setwebviewdomain"; + /** * 小程序成员管理:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1489140588_nVUgx&token=&lang=zh_CN * access_token 为 authorizer_access_token */ String BIND_TESTER_URL = "https://api.weixin.qq.com/wxa/bind_tester"; + String UNBIND_TESTER_URL = "https://api.weixin.qq.com/wxa/unbind_tester"; } - public interface Share { - - } + public interface Share {} public interface Subscribe { - /** - * 获取模板标题下的关键词列表. - */ - String GET_PUB_TEMPLATE_TITLE_LIST_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatetitles"; - /** - * 获取模板标题下的关键词列表. - */ - String GET_PUB_TEMPLATE_KEY_WORDS_BY_ID_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatekeywords"; - /** - * 组合模板并添加至帐号下的个人模板库. - */ + /** 获取模板标题下的关键词列表. */ + String GET_PUB_TEMPLATE_TITLE_LIST_URL = + "https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatetitles"; + + /** 获取模板标题下的关键词列表. */ + String GET_PUB_TEMPLATE_KEY_WORDS_BY_ID_URL = + "https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatekeywords"; + + /** 组合模板并添加至帐号下的个人模板库. */ String TEMPLATE_ADD_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate"; - /** - * 获取当前帐号下的个人模板列表. - */ + + /** 获取当前帐号下的个人模板列表. */ String TEMPLATE_LIST_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/gettemplate"; - /** - * 删除帐号下的某个模板. - */ + + /** 删除帐号下的某个模板. */ String TEMPLATE_DEL_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/deltemplate"; - /** - * 获取小程序账号的类目 - */ + + /** 获取小程序账号的类目 */ String GET_CATEGORY_URL = "https://api.weixin.qq.com/wxaapi/newtmpl/getcategory"; - /** - * 发送订阅消息 - */ + + /** 发送订阅消息 */ String SUBSCRIBE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send"; } public interface User { - String SET_USER_STORAGE = "https://api.weixin.qq.com/wxa/set_user_storage?appid=%s&signature=%s&openid=%s&sig_method=%s"; + String SET_USER_STORAGE = + "https://api.weixin.qq.com/wxa/set_user_storage?appid=%s&signature=%s&openid=%s&sig_method=%s"; String GET_PHONE_NUMBER_URL = "https://api.weixin.qq.com/wxa/business/getuserphonenumber"; } @@ -459,12 +405,14 @@ interface Sku { interface Order { String PRODUCT_ORDER_GET_LIST = "https://api.weixin.qq.com/product/order/get_list"; String PRODUCT_ORDER_DETAIL_URL = "https://api.weixin.qq.com/product/order/get"; - String PRODUCT_ORDER_CHANGE_MERCHANT_NOTES_URL = "https://api.weixin.qq.com/product/order/change_merchant_notes"; + String PRODUCT_ORDER_CHANGE_MERCHANT_NOTES_URL = + "https://api.weixin.qq.com/product/order/change_merchant_notes"; String PRODUCT_DELIVERY_SEND = "https://api.weixin.qq.com/product/delivery/send"; String GET_AFTER_SALE_ORDER = "https://api.weixin.qq.com/product/order/getaftersaleorder"; - String BATCH_GET_AFTER_SALE_ORDER = "https://api.weixin.qq.com/product/order/batchgetaftersaleorder"; + String BATCH_GET_AFTER_SALE_ORDER = + "https://api.weixin.qq.com/product/order/batchgetaftersaleorder"; String AFTER_SALE_ACCEPT_APPLY = "https://api.weixin.qq.com/product/order/acceptapply"; String AFTER_SALE_REJECT_APPLY = "https://api.weixin.qq.com/product/order/rejectrefund"; } @@ -472,7 +420,8 @@ interface Order { interface OTHER { String GET_CATEGORY = "https://api.weixin.qq.com/product/category/get"; String GET_BRAND = "https://api.weixin.qq.com/product/brand/get"; - String GET_FREIGHT_TEMPLATE = "https://api.weixin.qq.com/product/delivery/get_freight_template"; + String GET_FREIGHT_TEMPLATE = + "https://api.weixin.qq.com/product/delivery/get_freight_template"; String IMG_UPLOAD = "https://api.weixin.qq.com/product/img/upload"; } } @@ -502,7 +451,8 @@ interface Order { interface Register { String REGISTER_APPLY = "https://api.weixin.qq.com/shop/register/apply"; String REGISTER_CHECK = "https://api.weixin.qq.com/shop/register/check"; - String REGISTER_FINISH_ACCESS_INFO = "https://api.weixin.qq.com/shop/register/finish_access_info"; + String REGISTER_FINISH_ACCESS_INFO = + "https://api.weixin.qq.com/shop/register/finish_access_info"; String REGISTER_APPLY_SCENE = "https://api.weixin.qq.com/shop/register/apply_scene"; } @@ -525,7 +475,8 @@ interface Audit { String AUDIT_BRAND = "https://api.weixin.qq.com/shop/audit/audit_brand"; String AUDIT_CATEGORY = "https://api.weixin.qq.com/shop/audit/audit_category"; String AUDIT_RESULT = "https://api.weixin.qq.com/shop/audit/result"; - String GET_MINIAPP_CERTIFICATE = "https://api.weixin.qq.com/shop/audit/get_miniapp_certificate"; + String GET_MINIAPP_CERTIFICATE = + "https://api.weixin.qq.com/shop/audit/get_miniapp_certificate"; } interface Delivery { @@ -539,11 +490,13 @@ interface Aftersale { String AFTERSALE_CANCEL = "https://api.weixin.qq.com/shop/ecaftersale/cancel"; String AFTERSALE_UPDATE = "https://api.weixin.qq.com/shop/aftersale/update"; String EC_AFTERSALE_UPDATE = "https://api.weixin.qq.com/shop/ecaftersale/update"; - String AFTERSALE_UPLOAD_RETURN_INFO = "https://api.weixin.qq.com/shop/ecaftersale/uploadreturninfo"; + String AFTERSALE_UPLOAD_RETURN_INFO = + "https://api.weixin.qq.com/shop/ecaftersale/uploadreturninfo"; String AFTERSALE_ACCEPT_REFUND = "https://api.weixin.qq.com/shop/ecaftersale/acceptrefund"; String AFTERSALE_ACCEPT_RETURN = "https://api.weixin.qq.com/shop/ecaftersale/acceptreturn"; String AFTERSALE_REJECT = "https://api.weixin.qq.com/shop/ecaftersale/reject"; - String AFTERSALE_UPLOAD_CERTIFICATES = "https://api.weixin.qq.com/shop/ecaftersale/upload_certificates"; + String AFTERSALE_UPLOAD_CERTIFICATES = + "https://api.weixin.qq.com/shop/ecaftersale/upload_certificates"; String AFTERSALE_UPLOAD_DEADLINE = "https://api.weixin.qq.com/shop/aftersale/update_deadline"; String AFTERSALE_GET_LIST = "https://api.weixin.qq.com/shop/ecaftersale/get_list"; String AFTERSALE_GET = "https://api.weixin.qq.com/shop/aftersale/get"; @@ -552,10 +505,13 @@ interface Aftersale { interface Sharer { String BIND = "https://api.weixin.qq.com/shop/sharer/bind"; - String GET_SHARER_DATA_SUMMARY = "https://api.weixin.qq.com/shop/sharer/get_sharer_data_summary"; + String GET_SHARER_DATA_SUMMARY = + "https://api.weixin.qq.com/shop/sharer/get_sharer_data_summary"; String GET_SHARER_LIST = "https://api.weixin.qq.com/shop/sharer/get_sharer_list"; - String GET_SHARER_LIVE_ORDER_LIST = "https://api.weixin.qq.com/shop/sharer/get_sharer_live_order_list"; - String GET_SHARER_LIVE_SUMMARY_LIST = "https://api.weixin.qq.com/shop/sharer/get_sharer_live_summary_list"; + String GET_SHARER_LIVE_ORDER_LIST = + "https://api.weixin.qq.com/shop/sharer/get_sharer_live_order_list"; + String GET_SHARER_LIVE_SUMMARY_LIST = + "https://api.weixin.qq.com/shop/sharer/get_sharer_live_summary_list"; String SEARCH_SHARER = "https://api.weixin.qq.com/shop/sharer/search_sharer"; String UNBIND = "https://api.weixin.qq.com/shop/sharer/unbind"; } @@ -570,7 +526,8 @@ interface Coupon { String ADD_USER_COUPON = "https://api.weixin.qq.com/shop/coupon/add_user_coupon"; String GET_USER_COUPON_LIST = "https://api.weixin.qq.com/shop/coupon/get_usercoupon_list"; String UPDATE_USER_COUPON = "https://api.weixin.qq.com/shop/coupon/update_user_coupon"; - String UPDATE_USER_COUPON_STATUS = "https://api.weixin.qq.com/shop/coupon/update_usercoupon_status"; + String UPDATE_USER_COUPON_STATUS = + "https://api.weixin.qq.com/shop/coupon/update_usercoupon_status"; } interface Pay { @@ -580,52 +537,41 @@ interface Pay { } } - /** - * 电子发票报销方 - */ + /** 电子发票报销方 */ public interface Invoice { - /** - * 报销方查询报销发票信息 - */ + /** 报销方查询报销发票信息 */ String GET_INVOICE_INFO = "https://api.weixin.qq.com/card/invoice/reimburse/getinvoiceinfo"; - /** - * 报销方批量查询报销发票信息 - */ + /** 报销方批量查询报销发票信息 */ String GET_INVOICE_BATCH = "https://api.weixin.qq.com/card/invoice/reimburse/getinvoicebatch"; - /** - * 报销方更新发票状态 - */ - String UPDATE_INVOICE_STATUS = "https://api.weixin.qq.com/card/invoice/reimburse/updateinvoicestatus"; + /** 报销方更新发票状态 */ + String UPDATE_INVOICE_STATUS = + "https://api.weixin.qq.com/card/invoice/reimburse/updateinvoicestatus"; - /** - * 报销方批量更新发票状态 - */ - String UPDATE_STATUS_BATCH = "https://api.weixin.qq.com/card/invoice/reimburse/updatestatusbatch"; + /** 报销方批量更新发票状态 */ + String UPDATE_STATUS_BATCH = + "https://api.weixin.qq.com/card/invoice/reimburse/updatestatusbatch"; } public interface Internet { String GET_USER_ENCRYPT_KEY = "https://api.weixin.qq.com/wxa/business/getuserencryptkey"; } - /** - * 设备订阅消息 - */ + /** 设备订阅消息 */ public interface DeviceSubscribe { - /** - * 获取设备票据 - */ + /** 获取设备票据 */ String GET_SN_TICKET_URL = "https://api.weixin.qq.com/wxa/getsnticket"; - /** - * 发送设备订阅消息 - */ - String SEND_DEVICE_SUBSCRIBE_MSG_URL = "https://api.weixin.qq.com/cgi-bin/message/device/subscribe/send"; + + /** 发送设备订阅消息 */ + String SEND_DEVICE_SUBSCRIBE_MSG_URL = + "https://api.weixin.qq.com/cgi-bin/message/device/subscribe/send"; } /** * 即时配送相关接口. + * *
    * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/immediate-delivery/overview.html
    * 
@@ -634,6 +580,7 @@ public interface InstantDelivery { /** * 拉取已绑定账号. + * *
      * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getBindAccount.html
      * 
@@ -642,6 +589,7 @@ public interface InstantDelivery { /** * 拉取配送单信息. + * *
      * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getOrder.html
      * 
@@ -650,73 +598,64 @@ public interface InstantDelivery { /** * 模拟配送公司更新配送单状态. + * *
      * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.mockUpdateOrder.html
      * 
*/ - String MOCK_UPDATE_ORDER = "https://api.weixin.qq.com/cgi-bin/express/local/business/test_update_order"; + String MOCK_UPDATE_ORDER = + "https://api.weixin.qq.com/cgi-bin/express/local/business/test_update_order"; - /** - * 物流服务-查询组件-跟踪物流面单 - * 商户使用此接口向微信提供某交易单号对应的运单号。微信后台会跟踪运单的状态变化 - */ - String TRACE_WAYBILL_URL = "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/trace_waybill"; + /** 物流服务-查询组件-跟踪物流面单 商户使用此接口向微信提供某交易单号对应的运单号。微信后台会跟踪运单的状态变化 */ + String TRACE_WAYBILL_URL = + "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/trace_waybill"; + /** 物流服务-查询组件-查询运单接口 query_trace 商户在调用完trace_waybill接口后,可以使用本接口查询到对应运单的详情信息 */ + String QUERY_WAYBILL_TRACE_URL = + "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/query_trace"; - /** - * 物流服务-查询组件-查询运单接口 query_trace - * 商户在调用完trace_waybill接口后,可以使用本接口查询到对应运单的详情信息 - */ - String QUERY_WAYBILL_TRACE_URL = "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/query_trace"; - - /** - * 物流服务-消息组件-传运单接口(订阅消息) follow_waybill - * 商户在调用完trace_waybill接口后,可以使用本接口查询到对应运单的详情信息 - */ - String FOLLOW_WAYBILL_URL = "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/follow_waybill"; - - /** - * 物流服务-消息组件-查运单接口(订阅消息) query_follow_trace - * 商户在调用完trace_waybill接口后,可以使用本接口查询到对应运单的详情信息 - */ - String QUERY_FOLLOW_TRACE_URL = "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/query_follow_trace"; + /** 物流服务-消息组件-传运单接口(订阅消息) follow_waybill 商户在调用完trace_waybill接口后,可以使用本接口查询到对应运单的详情信息 */ + String FOLLOW_WAYBILL_URL = + "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/follow_waybill"; - /** - * 获取运力id列表get_delivery_list - * 商户使用此接口获取所有运力id的列表 - */ - String GET_DELIVERY_LIST_URL = "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/get_delivery_list"; + /** 物流服务-消息组件-查运单接口(订阅消息) query_follow_trace 商户在调用完trace_waybill接口后,可以使用本接口查询到对应运单的详情信息 */ + String QUERY_FOLLOW_TRACE_URL = + "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/query_follow_trace"; - /** - * 获取运力id列表get_delivery_list - * 商户使用此接口获取所有运力id的列表 - */ - String UPDATE_WAYBILL_GOODS_URL = "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/update_waybill_goods"; + /** 获取运力id列表get_delivery_list 商户使用此接口获取所有运力id的列表 */ + String GET_DELIVERY_LIST_URL = + "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/get_delivery_list"; + /** 获取运力id列表get_delivery_list 商户使用此接口获取所有运力id的列表 */ + String UPDATE_WAYBILL_GOODS_URL = + "https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/update_waybill_goods"; - /** - * 下单接口. - */ + /** 下单接口. */ interface PlaceAnOrder { /** * 获取已支持的配送公司列表接口. + * *
        * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.getAllImmeDelivery.html
        * 
*/ - String GET_ALL_IMME_DELIVERY = "https://api.weixin.qq.com/cgi-bin/express/local/business/delivery/getall"; + String GET_ALL_IMME_DELIVERY = + "https://api.weixin.qq.com/cgi-bin/express/local/business/delivery/getall"; /** * 预下配送单接口. + * *
        * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.preAddOrder.html
        * 
*/ - String PRE_ADD_ORDER = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/pre_add"; + String PRE_ADD_ORDER = + "https://api.weixin.qq.com/cgi-bin/express/local/business/order/pre_add"; /** * 下配送单接口. + * *
        * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.addOrder.html
        * 
@@ -725,6 +664,7 @@ interface PlaceAnOrder { /** * 重新下单. + * *
        * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.reOrder.html
        * 
@@ -733,30 +673,31 @@ interface PlaceAnOrder { /** * 增加小费. + * *
        * 可以对待接单状态的订单增加小费。需要注意:订单的小费,以最新一次加小费动作的金额为准,故下一次增加小费额必须大于上一次小费额.
        * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.addTip.html
        * 
*/ String ADD_TIP = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/addtips"; - } - /** - * 取消接口. - */ + /** 取消接口. */ interface Cancel { /** * 预取消配送单接口. + * *
        * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.preCancelOrder.html
        * 
*/ - String PRE_CANCEL_ORDER = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/precancel"; + String PRE_CANCEL_ORDER = + "https://api.weixin.qq.com/cgi-bin/express/local/business/order/precancel"; /** * 取消配送单接口. + * *
        * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.cancelOrder.html
        * 
@@ -765,18 +706,19 @@ interface Cancel { /** * 异常件退回商家商家确认收货接口. + * *
        * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/immediate-delivery/by-business/immediateDelivery.abnormalConfirm.html
        * 
*/ - String ABNORMAL_CONFIRM = "https://api.weixin.qq.com/cgi-bin/express/local/business/order/confirm_return"; - + String ABNORMAL_CONFIRM = + "https://api.weixin.qq.com/cgi-bin/express/local/business/order/confirm_return"; } - } /** * 发货信息管理服务相关接口 + * *
    * 文档地址: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html#%E4%B8%80%E3%80%81%E5%8F%91%E8%B4%A7%E4%BF%A1%E6%81%AF%E5%BD%95%E5%85%A5%E6%8E%A5%E5%8F%A3
    * 
@@ -785,6 +727,7 @@ public interface OrderShipping { /** * 查询小程序是否已开通发货信息管理服务. + * *
      * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html#%E4%B8%83%E3%80%81%E6%9F%A5%E8%AF%A2%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%98%AF%E5%90%A6%E5%B7%B2%E5%BC%80%E9%80%9A%E5%8F%91%E8%B4%A7%E4%BF%A1%E6%81%AF%E7%AE%A1%E7%90%86%E6%9C%8D%E5%8A%A1
      * 
@@ -793,6 +736,7 @@ public interface OrderShipping { /** * 发货信息录入接口. + * *
      * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html#%E4%B8%80%E3%80%81%E5%8F%91%E8%B4%A7%E4%BF%A1%E6%81%AF%E5%BD%95%E5%85%A5%E6%8E%A5%E5%8F%A3
      * 
@@ -801,14 +745,17 @@ public interface OrderShipping { /** * 发货信息合单录入接口. + * *
      * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html#%E4%BA%8C%E3%80%81%E5%8F%91%E8%B4%A7%E4%BF%A1%E6%81%AF%E5%90%88%E5%8D%95%E5%BD%95%E5%85%A5%E6%8E%A5%E5%8F%A3
      * 
*/ - String UPLOAD_COMBINED_SHIPPING_INFO = "https://api.weixin.qq.com/wxa/sec/order/upload_combined_shipping_info"; + String UPLOAD_COMBINED_SHIPPING_INFO = + "https://api.weixin.qq.com/wxa/sec/order/upload_combined_shipping_info"; /** * 查询订单发货状态. + * *
      * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html#%E4%BA%8C%E3%80%81%E5%8F%91%E8%B4%A7%E4%BF%A1%E6%81%AF%E5%90%88%E5%8D%95%E5%BD%95%E5%85%A5%E6%8E%A5%E5%8F%A3
      * 
@@ -817,6 +764,7 @@ public interface OrderShipping { /** * 查询订单发货状态列表. + * *
      * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html#%E5%9B%9B%E3%80%81%E6%9F%A5%E8%AF%A2%E8%AE%A2%E5%8D%95%E5%88%97%E8%A1%A8
      * 
@@ -825,20 +773,22 @@ public interface OrderShipping { /** * 确认收货提醒接口. + * *
      * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html#%E4%BA%94%E3%80%81%E7%A1%AE%E8%AE%A4%E6%94%B6%E8%B4%A7%E6%8F%90%E9%86%92%E6%8E%A5%E5%8F%A3
      * 
*/ - String NOTIFY_CONFIRM_RECEIVE = "https://api.weixin.qq.com/wxa/sec/order/notify_confirm_receive"; + String NOTIFY_CONFIRM_RECEIVE = + "https://api.weixin.qq.com/wxa/sec/order/notify_confirm_receive"; /** * 消息跳转路径设置接口. + * *
      * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html#%E5%85%AD%E3%80%81%E6%B6%88%E6%81%AF%E8%B7%B3%E8%BD%AC%E8%B7%AF%E5%BE%84%E8%AE%BE%E7%BD%AE%E6%8E%A5%E5%8F%A3
      * 
*/ String SET_MSG_JUMP_PATH = "https://api.weixin.qq.com/wxa/sec/order/set_msg_jump_path"; - } public interface Vod { @@ -857,46 +807,58 @@ public interface Vod { String COMMIT_UPLOAD_URL = "https://api.weixin.qq.com/wxa/sec/vod/commitupload"; String GET_CDN_USAGE_DATA_URL = "https://api.weixin.qq.com/wxa/sec/vod/getcdnusagedata"; String GET_CDN_LOGS_URL = "https://api.weixin.qq.com/wxa/sec/vod/getcdnlogs"; - } /** * 小程序虚拟支付服务相关接口 + * *
    * 文档地址: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html#_2-3-%E6%9C%8D%E5%8A%A1%E5%99%A8API
    * 
*/ public interface XPay { - String QUERY_USER_BALANCE_URL = "https://api.weixin.qq.com/xpay/query_user_balance?pay_sig=%s&signature=%s"; + String QUERY_USER_BALANCE_URL = + "https://api.weixin.qq.com/xpay/query_user_balance?pay_sig=%s&signature=%s"; String CURRENCY_PAY_URL = "https://api.weixin.qq.com/xpay/currency_pay?pay_sig=%s&signature=%s"; String QUERY_ORDER_URL = "https://api.weixin.qq.com/xpay/query_order?pay_sig=%s"; - String CANCEL_CURRENCY_PAY_URL = "https://api.weixin.qq.com/xpay/cancel_currency_pay?pay_sig=%s&signature=%s"; - String NOTIFY_PROVIDE_GOODS_URL = "https://api.weixin.qq.com/xpay/notify_provide_goods?pay_sig=%s"; + String CANCEL_CURRENCY_PAY_URL = + "https://api.weixin.qq.com/xpay/cancel_currency_pay?pay_sig=%s&signature=%s"; + String NOTIFY_PROVIDE_GOODS_URL = + "https://api.weixin.qq.com/xpay/notify_provide_goods?pay_sig=%s"; String PRESENT_CURRENCY_URL = "https://api.weixin.qq.com/xpay/present_currency?pay_sig=%s"; String DOWNLOAD_BILL_URL = "https://api.weixin.qq.com/xpay/download_bill?pay_sig=%s"; String REFUND_ORDER_URL = "https://api.weixin.qq.com/xpay/refund_order?pay_sig=%s"; - String CREATE_WITHDRAW_ORDER_URL = "https://api.weixin.qq.com/xpay/create_withdraw_order?pay_sig=%s"; - String QUERY_WITHDRAW_ORDER_URL = "https://api.weixin.qq.com/xpay/query_withdraw_order?pay_sig=%s"; + String CREATE_WITHDRAW_ORDER_URL = + "https://api.weixin.qq.com/xpay/create_withdraw_order?pay_sig=%s"; + String QUERY_WITHDRAW_ORDER_URL = + "https://api.weixin.qq.com/xpay/query_withdraw_order?pay_sig=%s"; String START_UPLOAD_GOODS_URL = "https://api.weixin.qq.com/xpay/start_upload_goods?pay_sig=%s"; String QUERY_UPLOAD_GOODS_URL = "https://api.weixin.qq.com/xpay/query_upload_goods?pay_sig=%s"; - String START_PUBLISH_GOODS_URL = "https://api.weixin.qq.com/xpay/start_publish_goods?pay_sig=%s"; - String QUERY_PUBLISH_GOODS_URL = "https://api.weixin.qq.com/xpay/query_publish_goods?pay_sig=%s"; - + String START_PUBLISH_GOODS_URL = + "https://api.weixin.qq.com/xpay/start_publish_goods?pay_sig=%s"; + String QUERY_PUBLISH_GOODS_URL = + "https://api.weixin.qq.com/xpay/query_publish_goods?pay_sig=%s"; } /** * 退货组件 + * *
    * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/express/business/express_sale_return.html
    * 
*/ public interface ExpressDeliveryReturn { - String ADD_DELIVERY_RETURN_URL = "https://api.weixin.qq.com/cgi-bin/express/delivery/return/add"; - String GET_DELIVERY_RETURN_URL = "https://api.weixin.qq.com/cgi-bin/express/delivery/return/get"; - String UNBIND_DELIVERY_RETURN_URL = "https://api.weixin.qq.com/cgi-bin/express/delivery/return/unbind"; + String ADD_DELIVERY_RETURN_URL = + "https://api.weixin.qq.com/cgi-bin/express/delivery/return/add"; + String GET_DELIVERY_RETURN_URL = + "https://api.weixin.qq.com/cgi-bin/express/delivery/return/get"; + String UNBIND_DELIVERY_RETURN_URL = + "https://api.weixin.qq.com/cgi-bin/express/delivery/return/unbind"; } /** + * + * *
 小程序推广员
    * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/promoter/instruction/instruction.html
    * 
@@ -908,7 +870,8 @@ public interface Promotion { String PROMOTION_ADD_PROMOTER = "https://api.weixin.qq.com/promoter/addpromoter"; String PROMOTION_GET_PROMOTER = "https://api.weixin.qq.com/promoter/getpromoter"; String PROMOTION_UPDATE_PROMOTER = "https://api.weixin.qq.com/promoter/updatepromoter"; - String PROMOTION_GET_INVITATION_MATERIAL = "https://api.weixin.qq.com/promoter/getinvitationmaterial"; + String PROMOTION_GET_INVITATION_MATERIAL = + "https://api.weixin.qq.com/promoter/getinvitationmaterial"; String PROMOTION_SEND_MSG = "https://api.weixin.qq.com/promoter/sendmsg"; String PROMOTION_SINGLE_SEND_MSG = "https://api.weixin.qq.com/promoter/singlesendmsg"; String PROMOTION_GET_MSG = "https://api.weixin.qq.com/promoter/getmsg"; @@ -918,4 +881,24 @@ public interface Promotion { String PROMOTION_GET_ORDER = "https://api.weixin.qq.com/promoter/getorder"; } + public interface Intracity { + String APPLY_URL = "https://api.weixin.qq.com/cgi-bin/express/intracity/apply"; + String CREATE_STORE_URL = "https://api.weixin.qq.com/cgi-bin/express/intracity/createstore"; + String QUERY_STORE_URL = "https://api.weixin.qq.com/cgi-bin/express/intracity/querystore"; + String UPDATE_STORE_URL = "https://api.weixin.qq.com/cgi-bin/express/intracity/updatestore"; + + String STORE_CHARGE = "https://api.weixin.qq.com/cgi-bin/express/intracity/storecharge"; + String STORE_REFUND = "https://api.weixin.qq.com/cgi-bin/express/intracity/storerefund"; + String QUERY_FLOW = "https://api.weixin.qq.com/cgi-bin/express/intracity/queryflow"; + String BALANCE_QUERY = "https://api.weixin.qq.com/cgi-bin/express/intracity/balancequery"; + String GET_PAY_MODE = "https://api.weixin.qq.com/cgi-bin/express/intracity/getpaymode"; + String SET_PAY_MODE = "https://api.weixin.qq.com/cgi-bin/express/intracity/setpaymode"; + + String PRE_ADD_ORDER = "https://api.weixin.qq.com/cgi-bin/express/intracity/preaddorder"; + String ADD_ORDER = "https://api.weixin.qq.com/cgi-bin/express/intracity/addorder"; + String QUERY_ORDER = "https://api.weixin.qq.com/cgi-bin/express/intracity/queryorder"; + String CANCEL_ORDER = "https://api.weixin.qq.com/cgi-bin/express/intracity/cancelorder"; + + String GET_CITY = "https://api.weixin.qq.com/cgi-bin/express/intracity/getcity"; + } } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApacheApiSignaturePostRequestExecutor.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApacheApiSignaturePostRequestExecutor.java new file mode 100644 index 0000000000..3dcf22b10f --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApacheApiSignaturePostRequestExecutor.java @@ -0,0 +1,71 @@ +package cn.binarywang.wx.miniapp.executor; + +import cn.binarywang.wx.miniapp.bean.WxMaApiResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import me.chanjar.weixin.common.enums.WxType; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.http.RequestHttp; +import me.chanjar.weixin.common.util.http.apache.Utf8ResponseHandler; +import org.apache.http.Consts; +import org.apache.http.Header; +import org.apache.http.HttpHost; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ApacheApiSignaturePostRequestExecutor + extends ApiSignaturePostRequestExecutor { + private static final Logger logger = + LoggerFactory.getLogger(ApacheApiSignaturePostRequestExecutor.class); + + public ApacheApiSignaturePostRequestExecutor(RequestHttp requestHttp) { + super(requestHttp); + } + + @Override + public WxMaApiResponse execute( + String uri, Map headers, String postEntity, WxType wxType) + throws WxErrorException, IOException { + // logger.debug( + // "ApacheApiSignaturePostRequestExecutor.execute uri:{}, headers:{}, postData:{}", + // uri, + // headers, + // postEntity); + HttpPost httpPost = new HttpPost(uri); + if (requestHttp.getRequestHttpProxy() != null) { + RequestConfig config = + RequestConfig.custom().setProxy(requestHttp.getRequestHttpProxy()).build(); + httpPost.setConfig(config); + } + + if (headers != null) { + headers.forEach(httpPost::addHeader); + } + + if (postEntity != null) { + StringEntity entity = new StringEntity(postEntity, Consts.UTF_8); + entity.setContentType("application/json; charset=utf-8"); + httpPost.setEntity(entity); + } + + try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) { + String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); + Map respHeaders = new HashMap<>(); + Header[] rHeaders = response.getAllHeaders(); + if (rHeaders != null) { + for (Header h : rHeaders) { + respHeaders.putIfAbsent(h.getName(), h.getValue()); + } + } + return this.handleResponse(wxType, responseContent, respHeaders); + } finally { + httpPost.releaseConnection(); + } + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApiSignaturePostRequestExecutor.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApiSignaturePostRequestExecutor.java new file mode 100644 index 0000000000..8e3ade961e --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApiSignaturePostRequestExecutor.java @@ -0,0 +1,69 @@ +package cn.binarywang.wx.miniapp.executor; + +import cn.binarywang.wx.miniapp.bean.WxMaApiResponse; +import java.io.IOException; +import java.rmi.RemoteException; +import java.util.Map; +import me.chanjar.weixin.common.enums.WxType; +import me.chanjar.weixin.common.error.WxError; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.http.RequestExecutor; +import me.chanjar.weixin.common.util.http.RequestHttp; +import me.chanjar.weixin.common.util.http.ResponseHandler; +import org.jetbrains.annotations.NotNull; + +public abstract class ApiSignaturePostRequestExecutor + implements RequestExecutor { + + protected RequestHttp requestHttp; + + public ApiSignaturePostRequestExecutor(RequestHttp requestHttp) { + this.requestHttp = requestHttp; + } + + @Override + public WxMaApiResponse execute(String uri, WxMaApiResponse data, WxType wxType) + throws WxErrorException, IOException { + throw new RemoteException("method not implemented yet."); + } + + @Override + public void execute( + String uri, WxMaApiResponse data, ResponseHandler handler, WxType wxType) + throws WxErrorException, IOException { + throw new RemoteException("method not implemented yet."); + } + + public abstract WxMaApiResponse execute( + String uri, Map headers, String data, WxType wxType) + throws WxErrorException, IOException; + + @NotNull + public WxMaApiResponse handleResponse( + WxType wxType, String responseContent, Map headers) throws WxErrorException { + if (responseContent.isEmpty()) { + throw new WxErrorException("无响应内容"); + } + WxError error = WxError.fromJson(responseContent, wxType); + if (error.getErrorCode() != 0) { + throw new WxErrorException(error); + } + WxMaApiResponse response = new WxMaApiResponse(); + response.setContent(responseContent); + response.setHeaders(headers); + return response; + } + + public static ApiSignaturePostRequestExecutor create(RequestHttp requestHttp) { + switch (requestHttp.getRequestType()) { + case APACHE_HTTP: + return new ApacheApiSignaturePostRequestExecutor(requestHttp); + case JODD_HTTP: + return new JoddApiSignaturePostRequestExecutor(requestHttp); + case OK_HTTP: + return new OkHttpApiSignaturePostRequestExecutor(requestHttp); + default: + throw new IllegalArgumentException("非法请求参数"); + } + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/JoddApiSignaturePostRequestExecutor.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/JoddApiSignaturePostRequestExecutor.java new file mode 100644 index 0000000000..b7568bc21d --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/JoddApiSignaturePostRequestExecutor.java @@ -0,0 +1,59 @@ +package cn.binarywang.wx.miniapp.executor; + +import cn.binarywang.wx.miniapp.bean.WxMaApiResponse; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import jodd.http.HttpConnectionProvider; +import jodd.http.HttpRequest; +import jodd.http.HttpResponse; +import jodd.http.ProxyInfo; +import me.chanjar.weixin.common.enums.WxType; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.http.RequestHttp; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class JoddApiSignaturePostRequestExecutor + extends ApiSignaturePostRequestExecutor { + private static final Logger logger = + LoggerFactory.getLogger(JoddApiSignaturePostRequestExecutor.class); + + public JoddApiSignaturePostRequestExecutor(RequestHttp requestHttp) { + super(requestHttp); + } + + @Override + public WxMaApiResponse execute( + String uri, Map headers, String postEntity, WxType wxType) + throws WxErrorException, IOException { + // logger.debug( + // "JoddApiSignaturePostRequestExecutor.execute uri:{}, headers:{}, postData:{}", + // uri, + // headers, + // postEntity); + HttpConnectionProvider provider = requestHttp.getRequestHttpClient(); + ProxyInfo proxyInfo = requestHttp.getRequestHttpProxy(); + + HttpRequest request = HttpRequest.post(uri); + if (proxyInfo != null) { + provider.useProxy(proxyInfo); + } + if (headers != null) { + headers.forEach(request::header); + } + request.withConnectionProvider(provider); + if (postEntity != null) { + request.contentType("application/json", "utf-8"); + request.bodyText(postEntity); + } + HttpResponse response = request.send(); + response.charset(StandardCharsets.UTF_8.name()); + Map respHeaders = new HashMap<>(); + for (String n : response.headerNames()) { + respHeaders.putIfAbsent(n, response.header(n)); + } + return this.handleResponse(wxType, response.bodyText(), respHeaders); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/OkHttpApiSignaturePostRequestExecutor.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/OkHttpApiSignaturePostRequestExecutor.java new file mode 100644 index 0000000000..10c75a26bd --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/OkHttpApiSignaturePostRequestExecutor.java @@ -0,0 +1,51 @@ +package cn.binarywang.wx.miniapp.executor; + +import cn.binarywang.wx.miniapp.bean.WxMaApiResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import me.chanjar.weixin.common.enums.WxType; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.http.RequestHttp; +import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo; +import okhttp3.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class OkHttpApiSignaturePostRequestExecutor + extends ApiSignaturePostRequestExecutor { + private static final Logger logger = + LoggerFactory.getLogger(OkHttpApiSignaturePostRequestExecutor.class); + + public OkHttpApiSignaturePostRequestExecutor(RequestHttp requestHttp) { + super(requestHttp); + } + + @Override + public WxMaApiResponse execute( + String uri, Map headers, String postEntity, WxType wxType) + throws WxErrorException, IOException { + // logger.debug( + // "OkHttpApiSignaturePostRequestExecutor.execute uri:{}, headers:{}, postData:{}", + // uri, + // headers, + // postEntity); + RequestBody body = + RequestBody.Companion.create( + postEntity, MediaType.parse("application/json; charset=utf-8")); + Request.Builder builder = new Request.Builder(); + if (headers != null) { + headers.forEach(builder::addHeader); + } + Request request = builder.url(uri).post(body).build(); + Response response = requestHttp.getRequestHttpClient().newCall(request).execute(); + Map respHeaders = new HashMap<>(); + Headers rHeaders = response.headers(); + for (String n : rHeaders.names()) { + respHeaders.put(n, rHeaders.get(n)); + } + return this.handleResponse( + wxType, Objects.requireNonNull(response.body()).string(), respHeaders); + } +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpleTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpleTest.java new file mode 100644 index 0000000000..51ad846e96 --- /dev/null +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpleTest.java @@ -0,0 +1,234 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import static org.testng.AssertJUnit.*; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.intractiy.*; +import cn.binarywang.wx.miniapp.bean.openapi.WxMiniGetApiQuotaResult; +import cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants; +import cn.binarywang.wx.miniapp.test.ApiTestModule; +import cn.binarywang.wx.miniapp.test.TestConfig; +import com.google.inject.Inject; +import java.util.ArrayList; +import java.util.List; +import me.chanjar.weixin.common.error.WxErrorException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +@Test +@Guice(modules = ApiTestModule.class) +public class WxMaIntracityServiceImpleTest { + private static final Logger logger = LoggerFactory.getLogger(WxMaIntracityServiceImpleTest.class); + + @Inject private WxMaService wxService; + + @Test + public void testApiSignature() throws Exception { + WxMiniGetApiQuotaResult result = + wxService + .getWxMaOpenApiService() + .getApiQuota( + WxMaApiUrlConstants.Intracity.APPLY_URL.substring( + "https://api.weixin.qq.com".length())); + logger.info("apply 额度剩余 :{}", result.getQuota()); + } + + @Test + public void testApply() throws Exception { + logger.debug("testApply"); + try { + wxService.getIntracityService().apply(); + } catch (WxErrorException wxEx) { + if (wxEx.getError().getErrorCode() == 45009) { + // 调用分钟频率受限 + } else { + throw wxEx; + } + } + } + + @Test + public void testStoreRelatedApis() throws Exception { + WxMaStore store = new WxMaStore(); + store.setStoreName("南京东路店"); + store.setOutStoreId("njdl-001"); + WxMaStore.AddressInfo addr = new WxMaStore.AddressInfo(); + addr.setProvince("上海市"); + addr.setCity("上海市"); + addr.setArea("黄浦区"); + addr.setStreet(""); + addr.setHouse("南京东路690号"); + addr.setLat(31.235318); + addr.setLng(121.477284); + addr.setPhone("021-23456789"); + store.setAddressInfo(addr); + String wxStoreId; + List result = + wxService.getIntracityService().queryStoreByOutStoreId(store.getOutStoreId()); + if (result.isEmpty()) { + wxStoreId = wxService.getIntracityService().createStore(store); + logger.debug("create store result:{}", wxStoreId); + } else { + wxStoreId = result.get(0).getWxStoreId(); + } + store.setWxStoreId(wxStoreId); + addr.setPhone("021-23450000"); + store.setStoreName(null); + wxService.getIntracityService().updateStore(store); + List stores = wxService.getIntracityService().listAllStores(); + logger.info("listAllStores 查询到 {} 个门店 {}", stores.size(), stores); + if (stores.size() > 0) { + WxMaStore s = + wxService.getIntracityService().queryStoreByWxStoreId(stores.get(0).getWxStoreId()); + assertNotNull(s); + List list = + wxService.getIntracityService().queryStoreByOutStoreId(stores.get(0).getOutStoreId()); + logger.info("queryStoreByOutStoreId 查询到 {} 个门店 {}", list.size(), list); + } + } + + @Test + public void testStoreChargeRelated() throws Exception { + List stores = wxService.getIntracityService().listAllStores(); + if (stores.isEmpty()) { + logger.warn("没有门店,无法测试"); + return; + } + WxMaStore store = stores.get(0); + + WxMaGetPayModeResponse resp = wxService.getIntracityService().getPayMode(); + logger.debug("查询付费主体 {}", resp); + PayMode currentPayMode = resp.getPayMode(); + // 只能用当前付费模式充值;否则微信接口会返回 错误代码:934025, 错误信息:pay_mode not match + WxMaStoreChargeRequest request = new WxMaStoreChargeRequest(); + request.setPayMode(currentPayMode); + request.setWxStoreId(store.getWxStoreId()); + request.setServiceTransId("DADA"); + request.setAmount(5000); + String payUrl = wxService.getIntracityService().storeCharge(request); + logger.debug("充值URL:{}", payUrl); + + // 查询余额 + WxMaStoreBalance balance = + wxService.getIntracityService().balanceQuery(store.getWxStoreId(), null, PayMode.STORE); + logger.debug("余额 {}", balance); + + // 退款 + WxMaStoreRefundRequest rr = new WxMaStoreRefundRequest(); + rr.setPayMode(PayMode.STORE); + rr.setWxStoreId(store.getWxStoreId()); + rr.setServiceTransId("DADA"); + int refundAmount = wxService.getIntracityService().storeRefund(rr); + logger.debug("退款:{}", refundAmount); + + // 查询流水 + WxMaQueryFlowRequest qfr = new WxMaQueryFlowRequest(); + qfr.setWxStoreId(store.getWxStoreId()); + WxMaStoreFlowResponse flowResponse = wxService.getIntracityService().queryFlow(qfr); + logger.debug("查询流水 {}", flowResponse); + } + + @Test + public void testPayMode() throws Exception { + WxMaGetPayModeResponse resp = wxService.getIntracityService().getPayMode(); + logger.debug("查询付费主体 {}", resp); + PayMode newMode = resp.getPayMode() == PayMode.APP ? PayMode.STORE : PayMode.APP; + logger.debug("set pay mode to {}", newMode); + wxService.getIntracityService().setPayMode(newMode); + WxMaGetPayModeResponse resp2 = wxService.getIntracityService().getPayMode(); + logger.debug("查询付费主体 {}", resp2); + } + + @Test + public void testGetCity() throws Exception { + List list = wxService.getIntracityService().getCity(null); + logger.debug("支持的城市 {}", list); + List list2 = wxService.getIntracityService().getCity("SFTC"); + logger.debug("SFTC支持的城市有{}个", list2.get(0).getCityList().size()); + } + + @Test + public void testOrderRelatived() throws Exception { + List stores = wxService.getIntracityService().listAllStores(); + if (stores.isEmpty()) { + logger.warn("没有门店,无法测试"); + return; + } + String wxStoreId = stores.get(0).getWxStoreId(); + { + WxMaPreAddOrderRequest request = new WxMaPreAddOrderRequest(); + request.setWxStoreId(wxStoreId); + request.setUseSandbox(1); + request.setUserName("顺丰同城"); + request.setUserPhone("13800000138"); + request.setUserAddress("北京市海淀区学清嘉创大厦A座15层"); + request.setUserLat(40.01496); + request.setUserLng(116.353093); + WxMaPreAddOrderRequest.Cargo cargo = new WxMaPreAddOrderRequest.Cargo(); + cargo.setCargoName("蛋糕"); + cargo.setCargoType(13); + cargo.setCargoNum(1); + cargo.setCargoPrice(10000); + cargo.setCargoWeight(1000); + request.setCargo(cargo); + WxMaAddOrderResponse response = wxService.getIntracityService().preAddOrder(request); + logger.debug("查询运费返回 {}, 预估运费{}元", response, response.getFee() / 100.0); + } + String wxOrderId = null; + { + TestConfig config = (TestConfig) this.wxService.getWxMaConfig(); + WxMaAddOrderRequest request = new WxMaAddOrderRequest(); + request.setWxStoreId(wxStoreId); + request.setStoreOrderId("store-order-" + System.currentTimeMillis()); + request.setOrderSeq("0001"); + request.setUserOpenid(config.getOpenid()); + request.setUseSandbox(1); + request.setUserName("顺丰同城"); + request.setUserPhone("13800000138"); + request.setUserAddress("北京市海淀区学清嘉创大厦A座15层"); + request.setUserLat(40.01496); + request.setUserLng(116.353093); + request.setOrderDetailPath("/pages/user-center/order/detail/detail?id=xxx"); + WxMaAddOrderRequest.Cargo cargo = new WxMaAddOrderRequest.Cargo(); + cargo.setCargoName("蛋糕"); + cargo.setCargoType(13); + cargo.setCargoNum(1); + cargo.setCargoPrice(10000); + cargo.setCargoWeight(1000); + WxMaAddOrderRequest.ItemDetail detail = new WxMaAddOrderRequest.ItemDetail(); + detail.setItemName("蛋糕A"); + detail.setItemPicUrl("https://www.somehost.com/aaa.jpg"); + detail.setCount(1); + List itemList = new ArrayList<>(); + itemList.add(detail); + cargo.setItemList(itemList); + request.setCargo(cargo); + WxMaAddOrderResponse response = wxService.getIntracityService().addOrder(request); + wxOrderId = response.getWxOrderId(); + logger.debug("创建订单返回 {}, wxOrderId:{}", response, wxOrderId); + } + WxMaOrder order = wxService.getIntracityService().queryOrderByWxOrderId(wxOrderId); + logger.debug("查询订单返回 {}, storeOrderId:{} ", order, order.getStoreOrderId()); + WxMaOrder order2 = + wxService + .getIntracityService() + .queryOrderByStoreOrderId(wxStoreId, order.getStoreOrderId()); + logger.debug("查询订单返回 {}, ", order); + assertEquals(order2.getWxOrderId(), wxOrderId); + + WxMaCancelOrderResponse cancelOrderResp = + wxService.getIntracityService().cancelOrderByWxOrderId(wxOrderId, 1, "不再需要"); + logger.debug("取消订单返回 {}, 扣费:{} ", cancelOrderResp, cancelOrderResp.getDeductfee()); + + try { + wxService + .getIntracityService() + .cancelOrderByStoreOrderId(wxStoreId, order.getStoreOrderId(), 1, "不再需要"); + fail("重复取消未抛异常,疑似第一次取消未成功"); + } catch (WxErrorException wxErrorException) { + // 订单已经被取消了,重复取消会报错,这里才正常 + } + } +} diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java index 60304604d8..f973eca8f1 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java @@ -1,13 +1,12 @@ package me.chanjar.weixin.open.api; import cn.binarywang.wx.miniapp.config.WxMaConfig; +import java.util.concurrent.locks.Lock; import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; import me.chanjar.weixin.mp.config.WxMpConfigStorage; import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken; import me.chanjar.weixin.open.bean.WxOpenComponentAccessToken; -import java.util.concurrent.locks.Lock; - /** * The interface Wx open config storage. * @@ -99,9 +98,7 @@ public interface WxOpenConfigStorage { */ boolean isComponentAccessTokenExpired(); - /** - * Expire component access token. - */ + /** Expire component access token. */ void expireComponentAccessToken(); /** @@ -141,6 +138,7 @@ public interface WxOpenConfigStorage { /** * http 请求重试间隔 + * *
    *   {@link me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl#setRetrySleepMillis(int)}
    *   {@link cn.binarywang.wx.miniapp.api.impl.BaseWxMaServiceImpl#setRetrySleepMillis(int)}
@@ -150,6 +148,7 @@ public interface WxOpenConfigStorage {
 
   /**
    * http 请求最大重试次数
+   *
    * 
    *   {@link me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl#setMaxRetryTimes(int)}
    *   {@link cn.binarywang.wx.miniapp.api.impl.BaseWxMaServiceImpl#setMaxRetryTimes(int)}
@@ -199,7 +198,7 @@ public interface WxOpenConfigStorage {
    * 应该是线程安全的
    *
    * @param componentAccessToken 新的accessToken值
-   * @param expiresInSeconds     过期时间,以秒为单位
+   * @param expiresInSeconds 过期时间,以秒为单位
    */
   void updateComponentAccessToken(String componentAccessToken, int expiresInSeconds);
 
@@ -221,7 +220,7 @@ public interface WxOpenConfigStorage {
   /**
    * Sets authorizer refresh token.
    *
-   * @param appId                  the app id
+   * @param appId the app id
    * @param authorizerRefreshToken the authorizer refresh token
    */
   void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken);
@@ -229,7 +228,7 @@ public interface WxOpenConfigStorage {
   /**
    * setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) 方法重载方法
    *
-   * @param appId                  the app id
+   * @param appId the app id
    * @param authorizerRefreshToken the authorizer refresh token
    */
   void updateAuthorizerRefreshToken(String appId, String authorizerRefreshToken);
@@ -260,7 +259,7 @@ public interface WxOpenConfigStorage {
   /**
    * 应该是线程安全的
    *
-   * @param appId                 the app id
+   * @param appId the app id
    * @param authorizerAccessToken 要更新的WxAccessToken对象
    */
   void updateAuthorizerAccessToken(String appId, WxOpenAuthorizerAccessToken authorizerAccessToken);
@@ -268,11 +267,12 @@ public interface WxOpenConfigStorage {
   /**
    * 应该是线程安全的
    *
-   * @param appId                 the app id
+   * @param appId the app id
    * @param authorizerAccessToken 新的accessToken值
-   * @param expiresInSeconds      过期时间,以秒为单位
+   * @param expiresInSeconds 过期时间,以秒为单位
    */
-  void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds);
+  void updateAuthorizerAccessToken(
+      String appId, String authorizerAccessToken, int expiresInSeconds);
 
   /**
    * Gets jsapi ticket.
@@ -300,8 +300,8 @@ public interface WxOpenConfigStorage {
   /**
    * 应该是线程安全的
    *
-   * @param appId            the app id
-   * @param jsapiTicket      新的jsapi ticket值
+   * @param appId the app id
+   * @param jsapiTicket 新的jsapi ticket值
    * @param expiresInSeconds 过期时间,以秒为单位
    */
   void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds);
@@ -314,7 +314,6 @@ public interface WxOpenConfigStorage {
    */
   String getCardApiTicket(String appId);
 
-
   /**
    * Is card api ticket expired boolean.
    *
@@ -333,8 +332,8 @@ public interface WxOpenConfigStorage {
   /**
    * 应该是线程安全的
    *
-   * @param appId            the app id
-   * @param cardApiTicket    新的cardApi ticket值
+   * @param appId the app id
+   * @param cardApiTicket 新的cardApi ticket值
    * @param expiresInSeconds 过期时间,以秒为单位
    */
   void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds);
@@ -342,10 +341,30 @@ public interface WxOpenConfigStorage {
   /**
    * 设置第三方平台基础信息
    *
-   * @param componentAppId     第三方平台 appid
+   * @param componentAppId 第三方平台 appid
    * @param componentAppSecret 第三方平台 appsecret
-   * @param componentToken     消息校验Token
-   * @param componentAesKey    消息加解密Key
+   * @param componentToken 消息校验Token
+   * @param componentAesKey 消息加解密Key
    */
-  void setWxOpenInfo(String componentAppId, String componentAppSecret, String componentToken, String componentAesKey);
+  void setWxOpenInfo(
+      String componentAppId,
+      String componentAppSecret,
+      String componentToken,
+      String componentAesKey);
+
+  String getComponentApiSignatureRsaPrivateKey();
+
+  void setComponentApiSignatureRsaPrivateKey(String componentApiSignatureRsaPrivateKey);
+
+  String getComponentApiSignatureAesKey();
+
+  void setComponentApiSignatureAesKey(String componentApiSignatureAesKey);
+
+  String getComponentApiSignatureRsaPrivateKeySn();
+
+  void setComponentApiSignatureRsaPrivateKeySn(String componentApiSignatureRsaPrivateKeySn);
+
+  String getComponentApiSignatureAesKeySn();
+
+  void setComponentApiSignatureAesKeySn(String componentApiSignatureAesKeySn);
 }
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java
index 43a351100e..a103315b5d 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java
@@ -1,7 +1,11 @@
 package me.chanjar.weixin.open.api.impl;
 
-
 import cn.binarywang.wx.miniapp.config.WxMaConfig;
+import java.io.File;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 import lombok.AccessLevel;
 import lombok.Data;
 import lombok.Getter;
@@ -16,12 +20,6 @@
 import me.chanjar.weixin.open.bean.WxOpenComponentAccessToken;
 import me.chanjar.weixin.open.util.json.WxOpenGsonBuilder;
 
-import java.io.File;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
 /**
  * 基于内存的微信配置provider,在实际生产环境中应该将这些配置持久化
  *
@@ -37,26 +35,36 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage {
   private String componentAccessToken;
   private long componentExpiresTime;
 
+  private String componentApiSignatureRsaPrivateKey;
+  private String componentApiSignatureAesKey;
+  private String componentApiSignatureRsaPrivateKeySn;
+  private String componentApiSignatureAesKeySn;
+
   private String httpProxyHost;
   private int httpProxyPort;
   private String httpProxyUsername;
   private String httpProxyPassword;
+
   /**
    * http 请求重试间隔
+   *
    * 
    *   {@link me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl#setRetrySleepMillis(int)}
    *   {@link cn.binarywang.wx.miniapp.api.impl.BaseWxMaServiceImpl#setRetrySleepMillis(int)}
    * 
*/ private int retrySleepMillis = 1000; + /** * http 请求最大重试次数 + * *
    *   {@link me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl#setMaxRetryTimes(int)}
    *   {@link cn.binarywang.wx.miniapp.api.impl.BaseWxMaServiceImpl#setMaxRetryTimes(int)}
    * 
*/ private int maxRetryTimes = 5; + private ApacheHttpClientBuilder apacheHttpClientBuilder; private Map authorizerRefreshTokens = new ConcurrentHashMap<>(); @@ -77,7 +85,8 @@ public void expireComponentAccessToken() { @Override public void updateComponentAccessToken(WxOpenComponentAccessToken componentAccessToken) { - updateComponentAccessToken(componentAccessToken.getComponentAccessToken(), componentAccessToken.getExpiresIn()); + updateComponentAccessToken( + componentAccessToken.getComponentAccessToken(), componentAccessToken.getExpiresIn()); } private Lock accessTokenLockInstance; @@ -126,8 +135,11 @@ public void updateComponentAccessToken(String componentAccessToken, int expiresI } @Override - public void setWxOpenInfo(String componentAppId, String componentAppSecret, String componentToken, - String componentAesKey) { + public void setWxOpenInfo( + String componentAppId, + String componentAppSecret, + String componentToken, + String componentAesKey) { setComponentAppId(componentAppId); setComponentAppSecret(componentAppSecret); setComponentToken(componentToken); @@ -141,7 +153,8 @@ public boolean autoRefreshToken() { private String getTokenString(Map map, String key) { Token token = map.get(key); - if (token == null || (token.expiresTime != null && System.currentTimeMillis() > token.expiresTime)) { + if (token == null + || (token.expiresTime != null && System.currentTimeMillis() > token.expiresTime)) { return null; } return token.token; @@ -154,7 +167,8 @@ private void expireToken(Map map, String key) { } } - private void updateToken(Map map, String key, String tokenString, Integer expiresInSeconds) { + private void updateToken( + Map map, String key, String tokenString, Integer expiresInSeconds) { Token token = map.get(key); if (token == null) { token = new Token(); @@ -186,7 +200,6 @@ public String getAuthorizerAccessToken(String appId) { return getTokenString(authorizerAccessTokens, appId); } - @Override public boolean isAuthorizerAccessTokenExpired(String appId) { return getTokenString(authorizerAccessTokens, appId) == null; @@ -198,13 +211,17 @@ public void expireAuthorizerAccessToken(String appId) { } @Override - public void updateAuthorizerAccessToken(String appId, WxOpenAuthorizerAccessToken authorizerAccessToken) { - updateAuthorizerAccessToken(appId, authorizerAccessToken.getAuthorizerAccessToken(), - authorizerAccessToken.getExpiresIn()); + public void updateAuthorizerAccessToken( + String appId, WxOpenAuthorizerAccessToken authorizerAccessToken) { + updateAuthorizerAccessToken( + appId, + authorizerAccessToken.getAuthorizerAccessToken(), + authorizerAccessToken.getExpiresIn()); } @Override - public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) { + public void updateAuthorizerAccessToken( + String appId, String authorizerAccessToken, int expiresInSeconds) { updateToken(authorizerAccessTokens, appId, authorizerAccessToken, expiresInSeconds); } @@ -261,21 +278,18 @@ private static class WxOpenInnerConfigStorage implements WxMpConfigStorage, WxMa private WxMpHostConfig hostConfig; private String apiHostUrl; private String accessTokenUrl; - /** - * 是否使用稳定版获取accessToken接口 - */ + + /** 是否使用稳定版获取accessToken接口 */ @Getter(value = AccessLevel.NONE) @Setter(value = AccessLevel.NONE) private boolean useStableAccessToken; - /** - * 小程序原始ID - */ + /** 小程序原始ID */ private volatile String originalId; - /** - * 云环境ID - */ + + /** 云环境ID */ private volatile String cloudEnv; + private final Lock accessTokenLock; private final Lock jsapiTicketLock; private final Lock cardApiTicketLock; @@ -326,15 +340,18 @@ public synchronized void updateAccessToken(String accessToken, int expiresInSeco @Override public String getTicket(TicketType type) { switch (type) { - case JSAPI: { - return wxOpenConfigStorage.getJsapiTicket(appId); - } - case WX_CARD: { - return wxOpenConfigStorage.getCardApiTicket(appId); - } - default: { - // do nothing - } + case JSAPI: + { + return wxOpenConfigStorage.getJsapiTicket(appId); + } + case WX_CARD: + { + return wxOpenConfigStorage.getCardApiTicket(appId); + } + default: + { + // do nothing + } } return null; } @@ -342,15 +359,18 @@ public String getTicket(TicketType type) { @Override public Lock getTicketLock(TicketType type) { switch (type) { - case JSAPI: { - return this.jsapiTicketLock; - } - case WX_CARD: { - return this.cardApiTicketLock; - } - default: { - // do nothing - } + case JSAPI: + { + return this.jsapiTicketLock; + } + case WX_CARD: + { + return this.cardApiTicketLock; + } + default: + { + // do nothing + } } return null; } @@ -358,15 +378,18 @@ public Lock getTicketLock(TicketType type) { @Override public boolean isTicketExpired(TicketType type) { switch (type) { - case JSAPI: { - return wxOpenConfigStorage.isJsapiTicketExpired(appId); - } - case WX_CARD: { - return wxOpenConfigStorage.isCardApiTicketExpired(appId); - } - default: { - // do nothing - } + case JSAPI: + { + return wxOpenConfigStorage.isJsapiTicketExpired(appId); + } + case WX_CARD: + { + return wxOpenConfigStorage.isCardApiTicketExpired(appId); + } + default: + { + // do nothing + } } return false; @@ -375,36 +398,41 @@ public boolean isTicketExpired(TicketType type) { @Override public void expireTicket(TicketType type) { switch (type) { - case JSAPI: { - wxOpenConfigStorage.expireJsapiTicket(appId); - break; - } - case WX_CARD: { - wxOpenConfigStorage.expireCardApiTicket(appId); - break; - } - default: { - // do nothing - } + case JSAPI: + { + wxOpenConfigStorage.expireJsapiTicket(appId); + break; + } + case WX_CARD: + { + wxOpenConfigStorage.expireCardApiTicket(appId); + break; + } + default: + { + // do nothing + } } } @Override public void updateTicket(TicketType type, String ticket, int expiresInSeconds) { switch (type) { - case JSAPI: { - wxOpenConfigStorage.updateJsapiTicket(appId, ticket, expiresInSeconds); - break; - } - case WX_CARD: { - wxOpenConfigStorage.updateCardApiTicket(appId, ticket, expiresInSeconds); - break; - } - default: { - // do nothing - } + case JSAPI: + { + wxOpenConfigStorage.updateJsapiTicket(appId, ticket, expiresInSeconds); + break; + } + case WX_CARD: + { + wxOpenConfigStorage.updateCardApiTicket(appId, ticket, expiresInSeconds); + break; + } + default: + { + // do nothing + } } - } @Override @@ -510,12 +538,35 @@ public long getExpiresTime() { return 0; } - @Override public String getAesKey() { return wxOpenConfigStorage.getComponentAesKey(); } + @Override + public String getApiSignatureRsaPrivateKey() { + return wxOpenConfigStorage.getComponentApiSignatureRsaPrivateKey(); + } + + @Override + public String getApiSignatureAesKey() { + return wxOpenConfigStorage.getComponentApiSignatureAesKey(); + } + + public String getApiSignatureRsaPrivateKeySn() { + return wxOpenConfigStorage.getComponentApiSignatureRsaPrivateKeySn(); + } + + @Override + public String getApiSignatureAesKeySn() { + return wxOpenConfigStorage.getComponentApiSignatureAesKeySn(); + } + + @Override + public String getWechatMpAppid() { + return wxOpenConfigStorage.getComponentAppId(); + } + @Override public String getMsgDataFormat() { return null; From 8205ce9163578f5f38b18c4d64c0bccacbcf08d8 Mon Sep 17 00:00:00 2001 From: gexiangdong Date: Thu, 31 Oct 2024 18:03:14 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E8=AE=BE=E7=BD=AE=E5=B0=8F=E7=A8=8B=E5=BA=8FAPI?= =?UTF-8?q?=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- weixin-java-miniapp/api-signature-readme.md | 3 ++- .../wx/miniapp/api/impl/BaseWxMaServiceImpl.java | 5 +++-- .../src/test/resources/test-config-sample.xml | 5 +++++ .../chanjar/weixin/open/api/WxOpenConfigStorage.java | 12 ++++-------- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/weixin-java-miniapp/api-signature-readme.md b/weixin-java-miniapp/api-signature-readme.md index 5c8fabb384..1ab8ab346a 100644 --- a/weixin-java-miniapp/api-signature-readme.md +++ b/weixin-java-miniapp/api-signature-readme.md @@ -40,6 +40,7 @@ apiSignatureRsaPrivateKey 在上图中**无**对应,C处右侧是公钥,apiS 1. 如果不先点击「随机生成密钥对」,直接点击「下载私钥」得到的是公钥,公钥在这里没有用途。 2. 打开下载的文件,第一行是「-----BEGIN RSA PRIVATE KEY-----」说明是PKCS1格式私钥。 3. PKCS8格式第一行是「-----BEGIN PRIVATE KEY-----」 -4. 转换命令 `openssl pkcs8 -topk8 -inform PEM -outform DER -in PKCS1格式密钥文件名 -out 新的PKCS8格式密钥文件名 -nocrypt` +4. 转换命令 `openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in PKCS1格式密钥文件名 -out 新的PKCS8格式密钥文件名` +5. 如果密钥文件有 PUBLIC KEY 字样,说明下载了公钥,重新生成密钥对,下载私钥 diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java index cb537b9297..a9114465a0 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java @@ -361,10 +361,11 @@ public WxMaApiResponse execute( Map headers, String data) throws WxErrorException { + String dataForLog = "Headers: " + headers.toString() + " Body: " + data; return excuteWithRetry( (uriWithAccessToken) -> executor.execute(uriWithAccessToken, headers, data, WxType.MiniApp), uri, - data); + dataForLog); } private static interface ExecutorAction { @@ -864,7 +865,7 @@ private String base64Encode(byte[] data) { @Override public String postWithSignature(String url, JsonObject jsonObject) throws WxErrorException { long timestamp = System.currentTimeMillis() / 1000; - String appId = this.getWxMaConfig().getAppid(); + String appId = this.getWxMaConfig().getWechatMpAppid(); String rndStr = UUID.randomUUID().toString().replace("-", "").substring(0, 30); String aesKey = this.getWxMaConfig().getApiSignatureAesKey(); String aesKeySn = this.getWxMaConfig().getApiSignatureAesKeySn(); diff --git a/weixin-java-miniapp/src/test/resources/test-config-sample.xml b/weixin-java-miniapp/src/test/resources/test-config-sample.xml index 7812fc7469..5a3272c0f0 100644 --- a/weixin-java-miniapp/src/test/resources/test-config-sample.xml +++ b/weixin-java-miniapp/src/test/resources/test-config-sample.xml @@ -9,4 +9,9 @@ 可以不填写 某个用户的openId 模版消息的模版ID + API签名AES密钥【没有开启API签名不要这条】 + API签名AES密钥的序号【没有开启API签名不要这条】 + API签名RSA私钥的【没有开启API签名不要这条】 + API签名RSA私钥的序【没有开启API签名不要这条】 + diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java index f973eca8f1..86efee5952 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java @@ -352,19 +352,15 @@ void setWxOpenInfo( String componentToken, String componentAesKey); + /** 第三方平台设置API签名 RSA 私钥 */ String getComponentApiSignatureRsaPrivateKey(); - void setComponentApiSignatureRsaPrivateKey(String componentApiSignatureRsaPrivateKey); - + /** 第三方平台设置API签名 AES KEY */ String getComponentApiSignatureAesKey(); - void setComponentApiSignatureAesKey(String componentApiSignatureAesKey); - + /** 第三方平台设置API签名 RSA 私钥 序号 */ String getComponentApiSignatureRsaPrivateKeySn(); - void setComponentApiSignatureRsaPrivateKeySn(String componentApiSignatureRsaPrivateKeySn); - + /** 第三方平台设置API签名 AES key 序号 */ String getComponentApiSignatureAesKeySn(); - - void setComponentApiSignatureAesKeySn(String componentApiSignatureAesKeySn); } From 368b74314460eb210379cd52278006c2e3b45af0 Mon Sep 17 00:00:00 2001 From: gexiangdong Date: Thu, 31 Oct 2024 19:05:24 +0800 Subject: [PATCH 3/3] add set --- .../me/chanjar/weixin/open/api/WxOpenConfigStorage.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java index 86efee5952..52f8f828cf 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java @@ -355,12 +355,20 @@ void setWxOpenInfo( /** 第三方平台设置API签名 RSA 私钥 */ String getComponentApiSignatureRsaPrivateKey(); + void setComponentApiSignatureRsaPrivateKey(String apiSignatureRsaPrivateKey); + /** 第三方平台设置API签名 AES KEY */ String getComponentApiSignatureAesKey(); + void setComponentApiSignatureAesKey(String apiSignatureAesKey); + /** 第三方平台设置API签名 RSA 私钥 序号 */ String getComponentApiSignatureRsaPrivateKeySn(); + void setComponentApiSignatureRsaPrivateKeySn(String apiSignatureRsaPrivateKeySn); + /** 第三方平台设置API签名 AES key 序号 */ String getComponentApiSignatureAesKeySn(); + + void setComponentApiSignatureAesKeySn(String apiSignatureAesKeySn); }

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 开发设置 -> API安全处,可以看到如下图界面。 + +![图一](../images/api-signature/api-signature-1.png) + +上图中A处对应 apiSignatureAesKeySn; B处对应apiSignatureAesKey; C处对应apiSignatureRsaPrivateKeySn + +apiSignatureRsaPrivateKey 在上图中**无**对应,C处右侧是公钥,apiSignatureRsaPrivateKey 需要的是私钥。 + +可点击图上右上角的修改,打开如下图的设置页面 + +![图二](../images/api-signature/api-signature-2.png) + +首先确保对称密钥选中 AES256,非对称密钥选中RSA。不要选SM4和SM2。 +(如果需要支持SM4/SM2,可修改BaseWxMaServiceImpl.java中postWithSignature方法中相应部分实现)。 + +在API非对称密钥中下方左侧有个「随机生成密钥对」,点击它,然后点它右侧的「下载私钥」,之后点击「确认」保存。 +下载得到的文件是PKCS1格式的私钥,用openssl可转成PKCS8格式。apiSignatureRsaPrivateKey 需要设置的是PKCS8格式的私钥。 + +注意: + +1. 如果不先点击「随机生成密钥对」,直接点击「下载私钥」得到的是公钥,公钥在这里没有用途。 +2. 打开下载的文件,第一行是「-----BEGIN RSA PRIVATE KEY-----」说明是PKCS1格式私钥。 +3. PKCS8格式第一行是「-----BEGIN PRIVATE KEY-----」 +4. 转换命令 `openssl pkcs8 -topk8 -inform PEM -outform DER -in PKCS1格式密钥文件名 -out 新的PKCS8格式密钥文件名 -nocrypt` + + diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaIntracityService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaIntracityService.java new file mode 100644 index 0000000000..80cd88b463 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaIntracityService.java @@ -0,0 +1,86 @@ +package cn.binarywang.wx.miniapp.api; + +import cn.binarywang.wx.miniapp.bean.intractiy.*; +import java.util.List; +import me.chanjar.weixin.common.error.WxErrorException; + +/** + * 微信小程序 物流服务 同城配送服务API
+ * *不是*即时配送接口,两个相近,容易混淆
+ * 微信相关接口
+ * https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/express/business/intracity_service.html + */ +public interface WxMaIntracityService { + + /** 申请开通门店权限 */ + void apply() throws WxErrorException; + + /** 创建门店 */ + String createStore(WxMaStore store) throws WxErrorException; + + /** + * 更新门店;只更新store中不为null的部分 wxStoreId和outStoreId至少要有一个不为null,根据这2个来更新。 仅支持更新 storeName orderPattern + * serviceTransPrefer addressInfo几个属性 + */ + void updateStore(WxMaStore store) throws WxErrorException; + + /** 查询门店(列出所有门店) */ + List listAllStores() throws WxErrorException; + + /** 根据wx_store_id查询门店 */ + WxMaStore queryStoreByWxStoreId(String wxStoreId) throws WxErrorException; + + /** 根据 out_store_id 查询门店 */ + List queryStoreByOutStoreId(String outStoreId) throws WxErrorException; + + /** 门店运费充值,返回充值URL */ + String storeCharge(WxMaStoreChargeRequest request) throws WxErrorException; + + /** 门店运费退款,返回退款金额 */ + int storeRefund(WxMaStoreRefundRequest request) throws WxErrorException; + + /** 门店运费流水查询 */ + WxMaStoreFlowResponse queryFlow( + WxMaQueryFlowRequest request) throws WxErrorException; + + /** 查询门店余额 */ + WxMaStoreBalance balanceQuery(String wxStoreId, String serviceTransId, PayMode payMode) + throws WxErrorException; + + /** + * 设置扣费主体
+ * 接口调用成功后,小程序的管理员会收到模板消息,点击模板消息确认更改门店扣费主体后,修改生效。 + */ + void setPayMode(PayMode payMode) throws WxErrorException; + + /** 查询扣费主体 */ + WxMaGetPayModeResponse getPayMode() throws WxErrorException; + + /** 查询运费 */ + WxMaAddOrderResponse preAddOrder(WxMaPreAddOrderRequest request) throws WxErrorException; + + /** 创建配送单 */ + WxMaAddOrderResponse addOrder(WxMaAddOrderRequest order) throws WxErrorException; + + /** 查询配送单 根据wxOrderId */ + WxMaOrder queryOrderByWxOrderId(String wxOrderId) throws WxErrorException; + + /** 依据商户订单号 查询配送单 */ + WxMaOrder queryOrderByStoreOrderId(String wxStoreId, String storeOrderId) throws WxErrorException; + + /** 依据微信订单号 查询配送单 */ + WxMaCancelOrderResponse cancelOrderByWxOrderId( + String wxOrderId, int cancelReasonId, String cancelReason) throws WxErrorException; + + /** 依据商户订单号 查询配送单 */ + WxMaCancelOrderResponse cancelOrderByStoreOrderId( + String wxStoreId, String storeOrderId, int cancelReasonId, String cancelReason) + throws WxErrorException; + + /** + * 查询支持同城配送的城市 + * + * @param serviceTransId 运力ID,传NULL则返回所有 + */ + List getCity(String serviceTransId) throws WxErrorException; +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java index 83cbf40a4e..9d55df3797 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java @@ -1,7 +1,11 @@ package cn.binarywang.wx.miniapp.api; +import cn.binarywang.wx.miniapp.bean.WxMaApiResponse; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.config.WxMaConfig; +import cn.binarywang.wx.miniapp.executor.ApiSignaturePostRequestExecutor; +import com.google.gson.JsonObject; +import java.util.Map; import java.util.function.Function; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.service.WxImgProcService; @@ -11,33 +15,25 @@ import me.chanjar.weixin.common.util.http.RequestExecutor; import me.chanjar.weixin.common.util.http.RequestHttp; -import java.util.Map; - /** * The interface Wx ma service. * * @author
Binary Wang */ public interface WxMaService extends WxService { - /** - * 获取access_token. - */ - String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; - String GET_STABLE_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/stable_token"; + /** 获取access_token. */ + String GET_ACCESS_TOKEN_URL = + "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; + String GET_STABLE_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/stable_token"; - /** - * The constant JSCODE_TO_SESSION_URL. - */ + /** The constant JSCODE_TO_SESSION_URL. */ String JSCODE_TO_SESSION_URL = "https://api.weixin.qq.com/sns/jscode2session"; - /** - * getPaidUnionId - */ + + /** getPaidUnionId */ String GET_PAID_UNION_ID_URL = "https://api.weixin.qq.com/wxa/getpaidunionid"; - /** - * 导入抽样数据 - */ + /** 导入抽样数据 */ String SET_DYNAMIC_DATA_URL = "https://api.weixin.qq.com/wxa/setdynamicdata"; /** @@ -51,6 +47,7 @@ public interface WxMaService extends WxService { /** * 导入抽样数据 + * *