package Ġcom . menu xx . weixin . ctrl Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . github . binary wang . wx pay . service . Wx Pay Service Ċ import Ġcom . google . common . io . Byte Streams Ċ import Ġcom . menu xx . common . bean . Order Charge Ċ import Ġcom . menu xx . common . exception . NotFoundException Ċ import Ġcom . menu xx . m ia os ha . queue . Msg Tags Ċ import Ġcom . menu xx . weixin . queue . publisher . Trade Order Publisher Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . amqp . A mq p Exception Ċ import Ġorg . springframework . beans . factory . annotation . Qualifier Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġjava . nio . charset . Charset Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ Ċ /** Ċ Ġ* Ġä½ľèĢħ : Ġy in ch ang sh eng @ gmail . com Ċ Ġ* ĠåĪĽå»º äºİ : Ġ 2 0 1 7 / 1 2 / 1 3 Ċ Ġ* Ġ å¾®ä¿¡ : Ġy in 8 0 8 7 1 9 0 1 Ċ Ġ* Ġ åıĤèĢĥ ï¼ļ Ġhttps :// pay . weixin . qq . com / wiki / doc / api / js api . php ? chapter = 9 _ 7 Ċ Ġ* Ġ å¾®ä¿¡ äºĭä»¶ åĽŀè°ĥ Ġ æĶ¯ä»ĺ åĽŀè°ĥ Ċ Ġ*/ Ċ @ RequestMapping ("/ weixin _ event _ handler ") Ċ @ RestController Ċ class ĠWe i X in EventHandler Ctrl ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtrade Order Publisher Ġ: ĠTrade Order Publisher , ĊĠĠĠĠĠĠĠ Ġ@ Qualifier (" wx Mp Pay Service ") Ġprivate Ġval Ġwx Mp Pay Service : ĠW x Pay Service , ĊĠĠĠĠĠĠĠ Ġ@ Qualifier (" wx Mini App Pay Service ") Ġprivate Ġval Ġwx Mini App Pay Service : ĠW x Pay Service , ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠobjectMapper : ĠObjectMapper Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġfinal Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Wei X in EventHandler Ctrl :: class . java ) ĊĊĠĠĠ Ġ@ PostMapping ("/ { provider :[ A - Za - z 0 - 9 ]+ }_ pay _ notify /{ tag }") ĊĠĠĠ Ġfun Ġpay Notify ( request : ĠHttpServletRequest , Ġ@ PathVariable Ġprovider : ĠString , Ġ@ PathVariable Ġtag : ĠString ) Ġ: ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotify Body Ġ= ĠString ( Byte Streams . toByteArray ( request . inputStream ), ĠCharset . forName (" UTF - 8 ")) ĊĠĠĠĠĠĠĠ Ġval Ġpay Service Ġ= Ġwhen ( provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mp " Ġ-> Ġwx Mp Pay Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mini " Ġ-> Ġwx Mini App Pay Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠNotFound Exception (" æľª æī¾åĪ° å¯¹åºĶçļĦ æĶ¯ä»ĺ éĢļ éģĵ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info (" ------- Ġwe ixin Ġpay Ġxml Ġ- Ġbegin . Ġ---------- ") ĊĠĠĠĠĠĠĠ Ġlogger . info ( notify Body ) ĊĠĠĠĠĠĠĠ Ġlogger . info (" ------- Ġwe ixin Ġpay Ġxml Ġ- Ġend . Ġ Ġ---------- ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpay Service . parse Order Notify Result ( notify Body ) ĊĠĠĠĠĠĠĠ Ġ// Ġåľ¨ ç³»ç»Ł ä¸Ń ĠOrder Charge Ġæĺ¯ ĠW x PayOrder Notify Result ĠçļĦ åŃĲ éĽĨ ï¼Į åı¯ä»¥ æĶ¶éĽĨ ĠW x PayOrder Notify Result Ġä¸ŃçļĦ å¤§ éĥ¨åĪĨ æķ°æį® ĊĠĠĠĠĠĠĠ Ġ// ĠW x PayOrder Notify Result Ġ=> ĠOrder Charge ĊĠĠĠĠĠĠĠ Ġval Ġmsg Body Ġ= ĠobjectMapper . writeValue As Bytes ( result ) ĊĠĠĠĠĠĠĠ Ġval Ġorder Charge Ġ= ĠobjectMapper . readValue < Order Charge >( msg Body , ĠOrder Charge :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( Ġtag Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMsg Tags . Tag Consume Ob tain Ġ-> Ġtrade Order Publisher . send Trade Order With Ob tain Consume ( order Charge ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMsg Tags . Tag M all Order Pay Ġ-> Ġtrade Order Publisher . send Trade M all Order Pay ( order Charge ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity . ok (" SUCCESS ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠA mq p Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" pay Notify ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity . status ( HttpStatus . INTERNAL _ SERVER _ ERROR ). body (" FAIL ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }