WxPayService.java 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851
  1. package com.github.binarywang.wxpay.service;
  2. import com.github.binarywang.wxpay.bean.WxPayApiData;
  3. import com.github.binarywang.wxpay.bean.coupon.*;
  4. import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
  5. import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult;
  6. import com.github.binarywang.wxpay.bean.notify.WxScanPayNotifyResult;
  7. import com.github.binarywang.wxpay.bean.request.*;
  8. import com.github.binarywang.wxpay.bean.result.*;
  9. import com.github.binarywang.wxpay.config.WxPayConfig;
  10. import com.github.binarywang.wxpay.constant.WxPayConstants;
  11. import com.github.binarywang.wxpay.exception.WxPayException;
  12. import org.apache.http.client.methods.HttpPost;
  13. import java.io.File;
  14. import java.io.InputStream;
  15. import java.net.URI;
  16. import java.util.Date;
  17. import java.util.Map;
  18. /**
  19. * <pre>
  20. * 微信支付相关接口.
  21. * Created by Binary Wang on 2016/7/28.
  22. * </pre>
  23. *
  24. * @author <a href="https://github.com/binarywang">Binary Wang</a>
  25. */
  26. public interface WxPayService {
  27. /**
  28. * 获取微信支付请求url前缀,沙箱环境可能不一样.
  29. *
  30. * @return the pay base url
  31. */
  32. String getPayBaseUrl();
  33. /**
  34. * 发送post请求,得到响应字节数组.
  35. *
  36. * @param url 请求地址
  37. * @param requestStr 请求信息
  38. * @param useKey 是否使用证书
  39. * @return 返回请求结果字节数组 byte [ ]
  40. * @throws WxPayException the wx pay exception
  41. */
  42. byte[] postForBytes(String url, String requestStr, boolean useKey) throws WxPayException;
  43. /**
  44. * 发送post请求,得到响应字符串.
  45. *
  46. * @param url 请求地址
  47. * @param requestStr 请求信息
  48. * @param useKey 是否使用证书
  49. * @return 返回请求结果字符串 string
  50. * @throws WxPayException the wx pay exception
  51. */
  52. String post(String url, String requestStr, boolean useKey) throws WxPayException;
  53. /**
  54. * 发送post请求,得到响应字符串.
  55. *
  56. * @param url 请求地址
  57. * @param requestStr 请求信息
  58. * @return 返回请求结果字符串 string
  59. * @throws WxPayException the wx pay exception
  60. */
  61. String postV3(String url, String requestStr) throws WxPayException;
  62. /**
  63. * 发送post请求,得到响应字符串.
  64. *
  65. * 部分字段会包含敏感信息,所以在提交前需要在请求头中会包含"Wechatpay-Serial"信息
  66. *
  67. * @param url 请求地址
  68. * @param requestStr 请求信息
  69. * @return 返回请求结果字符串 string
  70. * @throws WxPayException the wx pay exception
  71. */
  72. String postV3WithWechatpaySerial(String url, String requestStr) throws WxPayException;
  73. /**
  74. * 发送post请求,得到响应字符串.
  75. *
  76. * @param url 请求地址
  77. * @param httpPost 请求信息
  78. * @return 返回请求结果字符串 string
  79. * @throws WxPayException the wx pay exception
  80. */
  81. String postV3(String url, HttpPost httpPost) throws WxPayException;
  82. /**
  83. * 发送get V3请求,得到响应字符串.
  84. *
  85. * @param url 请求地址
  86. * @return 返回请求结果字符串 string
  87. * @throws WxPayException the wx pay exception
  88. */
  89. String getV3(URI url) throws WxPayException;
  90. /**
  91. * 发送下载 V3请求,得到响应流.
  92. *
  93. * @param url 请求地址
  94. * @return 返回请求响应流
  95. * @throws WxPayException the wx pay exception
  96. */
  97. InputStream downloadV3(URI url) throws WxPayException;
  98. /**
  99. * 获取企业付款服务类.
  100. *
  101. * @return the ent pay service
  102. */
  103. EntPayService getEntPayService();
  104. /**
  105. * 获取红包接口服务类.
  106. *
  107. * @return .
  108. */
  109. RedpackService getRedpackService();
  110. /**
  111. * 获取分账服务类.
  112. *
  113. * @return the ent pay service
  114. */
  115. ProfitSharingService getProfitSharingService();
  116. /**
  117. * 获取支付分服务类.
  118. *
  119. * @return the ent pay service
  120. */
  121. PayScoreService getPayScoreService();
  122. /**
  123. * 获取电商收付通服务类
  124. * @return
  125. */
  126. EcommerceService getEcommerceService();
  127. /**
  128. * 设置企业付款服务类,允许开发者自定义实现类.
  129. *
  130. * @param entPayService the ent pay service
  131. */
  132. void setEntPayService(EntPayService entPayService);
  133. /**
  134. * <pre>
  135. * 查询订单.
  136. * 详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2
  137. * 该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
  138. * 需要调用查询接口的情况:
  139. * ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
  140. * ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
  141. * ◆ 调用被扫支付API,返回USERPAYING的状态;
  142. * ◆ 调用关单或撤销接口API之前,需确认支付状态;
  143. * 接口地址:https://api.mch.weixin.qq.com/pay/orderquery
  144. * </pre>
  145. *
  146. * @param transactionId 微信订单号
  147. * @param outTradeNo 商户系统内部的订单号,当没提供transactionId时需要传这个。
  148. * @return the wx pay order query result
  149. * @throws WxPayException the wx pay exception
  150. */
  151. WxPayOrderQueryResult queryOrder(String transactionId, String outTradeNo) throws WxPayException;
  152. /**
  153. * <pre>
  154. * 查询订单(适合于需要自定义子商户号和子商户appid的情形).
  155. * 详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2
  156. * 该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
  157. * 需要调用查询接口的情况:
  158. * ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
  159. * ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
  160. * ◆ 调用被扫支付API,返回USERPAYING的状态;
  161. * ◆ 调用关单或撤销接口API之前,需确认支付状态;
  162. * 接口地址:https://api.mch.weixin.qq.com/pay/orderquery
  163. * </pre>
  164. *
  165. * @param request 查询订单请求对象
  166. * @return the wx pay order query result
  167. * @throws WxPayException the wx pay exception
  168. */
  169. WxPayOrderQueryResult queryOrder(WxPayOrderQueryRequest request) throws WxPayException;
  170. /**
  171. * <pre>
  172. * 关闭订单.
  173. * 应用场景
  174. * 以下情况需要调用关单接口:
  175. * 1. 商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;
  176. * 2. 系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
  177. * 注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。
  178. * 接口地址:https://api.mch.weixin.qq.com/pay/closeorder
  179. * 是否需要证书: 不需要。
  180. * </pre>
  181. *
  182. * @param outTradeNo 商户系统内部的订单号
  183. * @return the wx pay order close result
  184. * @throws WxPayException the wx pay exception
  185. */
  186. WxPayOrderCloseResult closeOrder(String outTradeNo) throws WxPayException;
  187. /**
  188. * <pre>
  189. * 关闭订单(适合于需要自定义子商户号和子商户appid的情形).
  190. * 应用场景
  191. * 以下情况需要调用关单接口:
  192. * 1. 商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;
  193. * 2. 系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
  194. * 注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。
  195. * 接口地址:https://api.mch.weixin.qq.com/pay/closeorder
  196. * 是否需要证书: 不需要。
  197. * </pre>
  198. *
  199. * @param request 关闭订单请求对象
  200. * @return the wx pay order close result
  201. * @throws WxPayException the wx pay exception
  202. */
  203. WxPayOrderCloseResult closeOrder(WxPayOrderCloseRequest request) throws WxPayException;
  204. /**
  205. * 调用统一下单接口,并组装生成支付所需参数对象.
  206. *
  207. * @param <T> 请使用{@link com.github.binarywang.wxpay.bean.order}包下的类
  208. * @param request 统一下单请求参数
  209. * @return 返回 {@link com.github.binarywang.wxpay.bean.order}包下的类对象
  210. * @throws WxPayException the wx pay exception
  211. */
  212. <T> T createOrder(WxPayUnifiedOrderRequest request) throws WxPayException;
  213. /**
  214. * 调用统一下单接口,并组装生成支付所需参数对象.
  215. *
  216. * @param specificTradeType 将使用的交易方式,不能为 null
  217. * @param request 统一下单请求参数,设定的 tradeType 及配置里的 tradeType 将被忽略,转而使用 specificTradeType
  218. * @return 返回 {@link WxPayConstants.TradeType.Specific} 指定的类
  219. * @throws WxPayException the wx pay exception
  220. * @see WxPayService#createOrder(WxPayUnifiedOrderRequest)
  221. */
  222. <T> T createOrder(WxPayConstants.TradeType.Specific<T> specificTradeType, WxPayUnifiedOrderRequest request) throws WxPayException;
  223. /**
  224. * 统一下单(详见https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1)
  225. * 在发起微信支付前,需要调用统一下单接口,获取"预支付交易会话标识"
  226. * 接口地址:https://api.mch.weixin.qq.com/pay/unifiedorder
  227. *
  228. * @param request 请求对象,注意一些参数如appid、mchid等不用设置,方法内会自动从配置对象中获取到(前提是对应配置中已经设置)
  229. * @return the wx pay unified order result
  230. * @throws WxPayException the wx pay exception
  231. */
  232. WxPayUnifiedOrderResult unifiedOrder(WxPayUnifiedOrderRequest request) throws WxPayException;
  233. /**
  234. * 该接口调用“统一下单”接口,并拼装发起支付请求需要的参数.
  235. * 详见https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
  236. *
  237. * @param request 请求对象,注意一些参数如appid、mchid等不用设置,方法内会自动从配置对象中获取到(前提是对应配置中已经设置)
  238. * @return the pay info
  239. * @throws WxPayException the wx pay exception
  240. * @deprecated 建议使用 {@link com.github.binarywang.wxpay.service.WxPayService#createOrder(WxPayUnifiedOrderRequest)}
  241. */
  242. @Deprecated
  243. Map<String, String> getPayInfo(WxPayUnifiedOrderRequest request) throws WxPayException;
  244. /**
  245. * 获取配置.
  246. *
  247. * @return the config
  248. */
  249. WxPayConfig getConfig();
  250. /**
  251. * 设置配置对象.
  252. *
  253. * @param config the config
  254. */
  255. void setConfig(WxPayConfig config);
  256. /**
  257. * <pre>
  258. * 微信支付-申请退款.
  259. * 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4
  260. * 接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund
  261. * </pre>
  262. *
  263. * @param request 请求对象
  264. * @return 退款操作结果 wx pay refund result
  265. * @throws WxPayException the wx pay exception
  266. */
  267. WxPayRefundResult refund(WxPayRefundRequest request) throws WxPayException;
  268. /**
  269. * <pre>
  270. * 申请退款API(支持单品).
  271. * 详见 https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_103&index=3
  272. *
  273. * 应用场景
  274. * 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。
  275. *
  276. * 注意:
  277. * 1、交易时间超过一年的订单无法提交退款;
  278. * 2、微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号。
  279. * 3、请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次
  280. * 错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次
  281. * 4、每个支付订单的部分退款次数不能超过50次
  282. * 5、本接口支持单品优惠订单全额退款和单品优惠订单部分退款,推荐使用本接口,如果使用不支持单品优惠部分退款的历史接口,请看https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=9_4
  283. *
  284. * 接口地址
  285. * https://api.mch.weixin.qq.com/secapi/pay/refundv2
  286. * https://api2.mch.weixin.qq.com/secapi/pay/refundv2(备用域名)见跨城冗灾方案
  287. * </pre>
  288. *
  289. * @param request 请求对象
  290. * @return 退款操作结果 wx pay refund result
  291. * @throws WxPayException the wx pay exception
  292. */
  293. WxPayRefundResult refundV2(WxPayRefundRequest request) throws WxPayException;
  294. /**
  295. * <pre>
  296. * 微信支付-查询退款.
  297. * 应用场景:
  298. * 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,
  299. * 银行卡支付的退款3个工作日后重新查询退款状态。
  300. * 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5
  301. * 接口链接:https://api.mch.weixin.qq.com/pay/refundquery
  302. * </pre>
  303. * 以下四个参数四选一
  304. *
  305. * @param transactionId 微信订单号
  306. * @param outTradeNo 商户订单号
  307. * @param outRefundNo 商户退款单号
  308. * @param refundId 微信退款单号
  309. * @return 退款信息 wx pay refund query result
  310. * @throws WxPayException the wx pay exception
  311. */
  312. WxPayRefundQueryResult refundQuery(String transactionId, String outTradeNo, String outRefundNo, String refundId)
  313. throws WxPayException;
  314. /**
  315. * <pre>
  316. * 微信支付-查询退款(适合于需要自定义子商户号和子商户appid的情形).
  317. * 应用场景:
  318. * 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,
  319. * 银行卡支付的退款3个工作日后重新查询退款状态。
  320. * 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5
  321. * 接口链接:https://api.mch.weixin.qq.com/pay/refundquery
  322. * </pre>
  323. *
  324. * @param request 微信退款单号
  325. * @return 退款信息 wx pay refund query result
  326. * @throws WxPayException the wx pay exception
  327. */
  328. WxPayRefundQueryResult refundQuery(WxPayRefundQueryRequest request) throws WxPayException;
  329. /**
  330. * <pre>
  331. * 微信支付-查询退款API(支持单品).
  332. * 应用场景
  333. * 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。
  334. * 注意:
  335. * 1、本接口支持查询单品优惠相关退款信息,且仅支持按微信退款单号或商户退款单号查询,若继续调用老查询退款接口,
  336. * 请见https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=9_5
  337. * 2、请求频率限制:300qps,即每秒钟正常的退款查询请求次数不超过300次
  338. * 3、错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款查询请求不超过6次
  339. *
  340. * 接口地址
  341. * https://api.mch.weixin.qq.com/pay/refundqueryv2
  342. * https://api2.mch.weixin.qq.com/pay/refundqueryv2(备用域名)见跨城冗灾方案
  343. * 详见 https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_104&index=4
  344. * </pre>
  345. *
  346. * @param request 微信退款单号
  347. * @return 退款信息 wx pay refund query result
  348. * @throws WxPayException the wx pay exception
  349. */
  350. WxPayRefundQueryResult refundQueryV2(WxPayRefundQueryRequest request) throws WxPayException;
  351. /**
  352. * 解析支付结果通知.
  353. * 详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
  354. *
  355. * @param xmlData the xml data
  356. * @return the wx pay order notify result
  357. * @throws WxPayException the wx pay exception
  358. */
  359. WxPayOrderNotifyResult parseOrderNotifyResult(String xmlData) throws WxPayException;
  360. /**
  361. * 解析支付结果通知.
  362. * 详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
  363. *
  364. * @param xmlData the xml data
  365. * @param signType 签名类型
  366. * @return the wx pay order notify result
  367. * @throws WxPayException the wx pay exception
  368. */
  369. WxPayOrderNotifyResult parseOrderNotifyResult(String xmlData, String signType) throws WxPayException;
  370. /**
  371. * 解析退款结果通知
  372. * 详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_16&index=9
  373. *
  374. * @param xmlData the xml data
  375. * @return the wx pay refund notify result
  376. * @throws WxPayException the wx pay exception
  377. */
  378. WxPayRefundNotifyResult parseRefundNotifyResult(String xmlData) throws WxPayException;
  379. /**
  380. * 解析扫码支付回调通知
  381. * 详见https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4
  382. *
  383. * @param xmlData the xml data
  384. * @return the wx scan pay notify result
  385. * @throws WxPayException the wx pay exception
  386. */
  387. WxScanPayNotifyResult parseScanPayNotifyResult(String xmlData) throws WxPayException;
  388. /**
  389. * <pre>
  390. * 扫码支付模式一生成二维码的方法。
  391. * 二维码中的内容为链接,形式为:
  392. * weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX
  393. * 其中XXXXX为商户需要填写的内容,商户将该链接生成二维码,如需要打印发布二维码,需要采用此格式。商户可调用第三方库生成二维码图片。
  394. * 文档详见: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4
  395. * </pre>
  396. *
  397. * @param productId 产品Id
  398. * @param logoFile 商户logo图片的文件对象,可以为空
  399. * @param sideLength 要生成的二维码的边长,如果为空,则取默认值400
  400. * @return 生成的二维码的字节数组 byte [ ]
  401. */
  402. byte[] createScanPayQrcodeMode1(String productId, File logoFile, Integer sideLength);
  403. /**
  404. * <pre>
  405. * 扫码支付模式一生成二维码的方法.
  406. * 二维码中的内容为链接,形式为:
  407. * weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX
  408. * 其中XXXXX为商户需要填写的内容,商户将该链接生成二维码,如需要打印发布二维码,需要采用此格式。商户可调用第三方库生成二维码图片。
  409. * 文档详见: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4
  410. * </pre>
  411. *
  412. * @param productId 产品Id
  413. * @return 生成的二维码URL连接 string
  414. */
  415. String createScanPayQrcodeMode1(String productId);
  416. /**
  417. * <pre>
  418. * 扫码支付模式二生成二维码的方法.
  419. * 对应链接格式:weixin://wxpay/bizpayurl?sr=XXXXX。请商户调用第三方库将code_url生成二维码图片。
  420. * 该模式链接较短,生成的二维码打印到结账小票上的识别率较高。
  421. * 文档详见: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5
  422. * </pre>
  423. *
  424. * @param codeUrl 微信返回的交易会话的二维码链接
  425. * @param logoFile 商户logo图片的文件对象,可以为空
  426. * @param sideLength 要生成的二维码的边长,如果为空,则取默认值400
  427. * @return 生成的二维码的字节数组 byte [ ]
  428. */
  429. byte[] createScanPayQrcodeMode2(String codeUrl, File logoFile, Integer sideLength);
  430. /**
  431. * <pre>
  432. * 交易保障.
  433. * 应用场景:
  434. * 商户在调用微信支付提供的相关接口时,会得到微信支付返回的相关信息以及获得整个接口的响应时间。
  435. * 为提高整体的服务水平,协助商户一起提高服务质量,微信支付提供了相关接口调用耗时和返回信息的主动上报接口,
  436. * 微信支付可以根据商户侧上报的数据进一步优化网络部署,完善服务监控,和商户更好的协作为用户提供更好的业务体验。
  437. * 接口地址: https://api.mch.weixin.qq.com/payitil/report
  438. * 是否需要证书:不需要
  439. * </pre>
  440. *
  441. * @param request the request
  442. * @throws WxPayException the wx pay exception
  443. */
  444. void report(WxPayReportRequest request) throws WxPayException;
  445. /**
  446. * <pre>
  447. * 下载对账单.
  448. * 商户可以通过该接口下载历史交易清单。比如掉单、系统错误等导致商户侧和微信侧数据不一致,通过对账单核对后可校正支付状态。
  449. * 注意:
  450. * 1、微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致,bill_type为REVOKED;
  451. * 2、微信在次日9点启动生成前一天的对账单,建议商户10点后再获取;
  452. * 3、对账单中涉及金额的字段单位为“元”。
  453. * 4、对账单接口只能下载三个月以内的账单。
  454. * 接口链接:https://api.mch.weixin.qq.com/pay/downloadbill
  455. * 详情请见: <a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_6">下载对账单</a>
  456. * </pre>
  457. *
  458. * @param billDate 对账单日期 bill_date 下载对账单的日期,格式:20140603
  459. * @param billType 账单类型 bill_type ALL,返回当日所有订单信息,默认值,SUCCESS,返回当日成功支付的订单,REFUND,返回当日退款订单
  460. * @param tarType 压缩账单 tar_type 非必传参数,固定值:GZIP,返回格式为.gzip的压缩包账单。不传则默认为数据流形式。
  461. * @param deviceInfo 设备号 device_info 非必传参数,终端设备号
  462. * @return 对账内容原始字符串
  463. * @throws WxPayException the wx pay exception
  464. */
  465. String downloadRawBill(String billDate, String billType, String tarType, String deviceInfo) throws WxPayException;
  466. /**
  467. * <pre>
  468. * 下载对账单(适合于需要自定义子商户号和子商户appid的情形).
  469. * 商户可以通过该接口下载历史交易清单。比如掉单、系统错误等导致商户侧和微信侧数据不一致,通过对账单核对后可校正支付状态。
  470. * 注意:
  471. * 1、微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致,bill_type为REVOKED;
  472. * 2、微信在次日9点启动生成前一天的对账单,建议商户10点后再获取;
  473. * 3、对账单中涉及金额的字段单位为“元”。
  474. * 4、对账单接口只能下载三个月以内的账单。
  475. * 接口链接:https://api.mch.weixin.qq.com/pay/downloadbill
  476. * 详情请见: <a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_6">下载对账单</a>
  477. * </pre>
  478. *
  479. * @param request 下载对账单请求
  480. * @return 对账内容原始字符串
  481. * @throws WxPayException the wx pay exception
  482. */
  483. String downloadRawBill(WxPayDownloadBillRequest request) throws WxPayException;
  484. /**
  485. * <pre>
  486. * 下载对账单.
  487. * 商户可以通过该接口下载历史交易清单。比如掉单、系统错误等导致商户侧和微信侧数据不一致,通过对账单核对后可校正支付状态。
  488. * 注意:
  489. * 1、微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致,bill_type为REVOKED;
  490. * 2、微信在次日9点启动生成前一天的对账单,建议商户10点后再获取;
  491. * 3、对账单中涉及金额的字段单位为“元”。
  492. * 4、对账单接口只能下载三个月以内的账单。
  493. * 接口链接:https://api.mch.weixin.qq.com/pay/downloadbill
  494. * 详情请见: <a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_6">下载对账单</a>
  495. * </pre>
  496. *
  497. * @param billDate 对账单日期 bill_date 下载对账单的日期,格式:20140603
  498. * @param billType 账单类型 bill_type ALL,返回当日所有订单信息,默认值,SUCCESS,返回当日成功支付的订单,REFUND,返回当日退款订单
  499. * @param tarType 压缩账单 tar_type 非必传参数,固定值:GZIP,返回格式为.gzip的压缩包账单。不传则默认为数据流形式。
  500. * @param deviceInfo 设备号 device_info 非必传参数,终端设备号
  501. * @return WxPayBillResult对象 wx pay bill result
  502. * @throws WxPayException the wx pay exception
  503. */
  504. WxPayBillResult downloadBill(String billDate, String billType, String tarType, String deviceInfo) throws WxPayException;
  505. /**
  506. * <pre>
  507. * 下载对账单(适合于需要自定义子商户号和子商户appid的情形).
  508. * 商户可以通过该接口下载历史交易清单。比如掉单、系统错误等导致商户侧和微信侧数据不一致,通过对账单核对后可校正支付状态。
  509. * 注意:
  510. * 1、微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致,bill_type为REVOKED;
  511. * 2、微信在次日9点启动生成前一天的对账单,建议商户10点后再获取;
  512. * 3、对账单中涉及金额的字段单位为“元”。
  513. * 4、对账单接口只能下载三个月以内的账单。
  514. * 接口链接:https://api.mch.weixin.qq.com/pay/downloadbill
  515. * 详情请见: <a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_6">下载对账单</a>
  516. * </pre>
  517. *
  518. * @param request 下载对账单请求
  519. * @return WxPayBillResult对象 wx pay bill result
  520. * @throws WxPayException the wx pay exception
  521. */
  522. WxPayBillResult downloadBill(WxPayDownloadBillRequest request) throws WxPayException;
  523. /**
  524. * <pre>
  525. * 下载资金账单.
  526. * 商户可以通过该接口下载自2017年6月1日起 的历史资金流水账单。
  527. * 注意:
  528. * 1、资金账单中的数据反映的是商户微信账户资金变动情况;
  529. * 2、当日账单在次日上午9点开始生成,建议商户在上午10点以后获取;
  530. * 3、资金账单中涉及金额的字段单位为“元”。
  531. * 接口链接:https://api.mch.weixin.qq.com/pay/downloadfundflow
  532. * 详情请见: <a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_18">下载对账单</a>
  533. * </pre>
  534. *
  535. * @param billDate 资金账单日期 bill_date 下载对账单的日期,格式:20140603
  536. * @param accountType 资金账户类型 account_type Basic,基本账户,Operation,运营账户,Fees,手续费账户
  537. * @param tarType 压缩账单 tar_type 非必传参数,固定值:GZIP,返回格式为.gzip的压缩包账单。不传则默认为数据流形式。
  538. * @return WxPayFundFlowResult对象 wx pay fund flow result
  539. * @throws WxPayException the wx pay exception
  540. */
  541. WxPayFundFlowResult downloadFundFlow(String billDate, String accountType, String tarType) throws WxPayException;
  542. /**
  543. * <pre>
  544. * 下载资金账单.
  545. * 商户可以通过该接口下载自2017年6月1日起 的历史资金流水账单。
  546. * 注意:
  547. * 1、资金账单中的数据反映的是商户微信账户资金变动情况;
  548. * 2、当日账单在次日上午9点开始生成,建议商户在上午10点以后获取;
  549. * 3、资金账单中涉及金额的字段单位为“元”。
  550. * 接口链接:https://api.mch.weixin.qq.com/pay/downloadfundflow
  551. * 详情请见: <a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_18">下载对账单</a>
  552. * </pre>
  553. *
  554. * @param request 下载资金流水请求
  555. * @return WxPayFundFlowResult对象 wx pay fund flow result
  556. * @throws WxPayException the wx pay exception
  557. */
  558. WxPayFundFlowResult downloadFundFlow(WxPayDownloadFundFlowRequest request) throws WxPayException;
  559. /**
  560. * <pre>
  561. * 提交付款码支付.
  562. * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10&index=1
  563. * 应用场景:
  564. * 收银员使用扫码设备读取微信用户刷卡授权码以后,二维码或条码信息传送至商户收银台,由商户收银台或者商户后台调用该接口发起支付。
  565. * 提醒1:提交支付请求后微信会同步返回支付结果。当返回结果为“系统错误”时,商户系统等待5秒后调用【查询订单API】,查询支付实际交易结果;当返回结果为“USERPAYING”时,商户系统可设置间隔时间(建议10秒)重新查询支付结果,直到支付成功或超时(建议30秒);
  566. * 提醒2:在调用查询接口返回后,如果交易状况不明晰,请调用【撤销订单API】,此时如果交易失败则关闭订单,该单不能再支付成功;如果交易成功,则将扣款退回到用户账户。当撤销无返回或错误时,请再次调用。注意:请勿扣款后立即调用【撤销订单API】,建议至少15秒后再调用。撤销订单API需要双向证书。
  567. * 接口地址: https://api.mch.weixin.qq.com/pay/micropay
  568. * 是否需要证书:不需要。
  569. * </pre>
  570. *
  571. * @param request the request
  572. * @return the wx pay micropay result
  573. * @throws WxPayException the wx pay exception
  574. */
  575. WxPayMicropayResult micropay(WxPayMicropayRequest request) throws WxPayException;
  576. /**
  577. * <pre>
  578. * 撤销订单API.
  579. * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_11&index=3
  580. * 应用场景:
  581. * 支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭;
  582. * 如果用户支付成功,微信支付系统会将此订单资金退还给用户。
  583. * 注意:7天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。
  584. * 提交支付交易后调用【查询订单API】,没有明确的支付结果再调用【撤销订单API】。
  585. * 调用支付接口后请勿立即调用撤销订单API,建议支付后至少15s后再调用撤销订单接口。
  586. * 接口链接 :https://api.mch.weixin.qq.com/secapi/pay/reverse
  587. * 是否需要证书:请求需要双向证书。
  588. * </pre>
  589. *
  590. * @param request the request
  591. * @return the wx pay order reverse result
  592. * @throws WxPayException the wx pay exception
  593. */
  594. WxPayOrderReverseResult reverseOrder(WxPayOrderReverseRequest request) throws WxPayException;
  595. /**
  596. * <pre>
  597. * 转换短链接.
  598. * 文档地址:
  599. * https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_9&index=8
  600. * 应用场景:
  601. * 该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量,提升扫描速度和精确度。
  602. * 接口地址:https://api.mch.weixin.qq.com/tools/shorturl
  603. * 是否需要证书:否
  604. * </pre>
  605. *
  606. * @param request 请求对象
  607. * @return the string
  608. * @throws WxPayException the wx pay exception
  609. */
  610. String shorturl(WxPayShorturlRequest request) throws WxPayException;
  611. /**
  612. * <pre>
  613. * 转换短链接.
  614. * </pre>
  615. *
  616. * @param longUrl 需要被压缩的网址
  617. * @return the string
  618. * @throws WxPayException the wx pay exception
  619. * @see WxPayService#shorturl(WxPayShorturlRequest) WxPayService#shorturl(WxPayShorturlRequest)
  620. */
  621. String shorturl(String longUrl) throws WxPayException;
  622. /**
  623. * <pre>
  624. * 授权码查询OPENID接口.
  625. * 通过授权码查询公众号Openid,调用查询后,该授权码只能由此商户号发起扣款,直至授权码更新。
  626. * 文档地址:
  627. * https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_13&index=9
  628. * 接口链接:
  629. * https://api.mch.weixin.qq.com/tools/authcodetoopenid
  630. * </pre>
  631. *
  632. * @param request 请求对象
  633. * @return openid string
  634. * @throws WxPayException the wx pay exception
  635. */
  636. String authcode2Openid(WxPayAuthcode2OpenidRequest request) throws WxPayException;
  637. /**
  638. * <pre>
  639. * 授权码查询OPENID接口.
  640. * </pre>
  641. *
  642. * @param authCode 授权码
  643. * @return openid string
  644. * @throws WxPayException the wx pay exception
  645. * @see WxPayService#authcode2Openid(WxPayAuthcode2OpenidRequest) WxPayService#authcode2Openid(WxPayAuthcode2OpenidRequest)
  646. */
  647. String authcode2Openid(String authCode) throws WxPayException;
  648. /**
  649. * <pre>
  650. * 获取仿真测试系统的验签密钥.
  651. * 请求Url: https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey
  652. * 是否需要证书: 否
  653. * 请求方式: POST
  654. * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_1
  655. * </pre>
  656. *
  657. * @return the sandbox sign key
  658. * @throws WxPayException the wx pay exception
  659. */
  660. String getSandboxSignKey() throws WxPayException;
  661. /**
  662. * <pre>
  663. * 发放代金券
  664. * 接口请求链接:https://api.mch.weixin.qq.com/mmpaymkttransfers/send_coupon
  665. * 是否需要证书:请求需要双向证书。
  666. * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_3
  667. * </pre>
  668. *
  669. * @param request the request
  670. * @return the wx pay coupon send result
  671. * @throws WxPayException the wx pay exception
  672. */
  673. WxPayCouponSendResult sendCoupon(WxPayCouponSendRequest request) throws WxPayException;
  674. /**
  675. * <pre>
  676. * 查询代金券批次.
  677. * 接口请求链接:https://api.mch.weixin.qq.com/mmpaymkttransfers/query_coupon_stock
  678. * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_4
  679. * </pre>
  680. *
  681. * @param request the request
  682. * @return the wx pay coupon stock query result
  683. * @throws WxPayException the wx pay exception
  684. */
  685. WxPayCouponStockQueryResult queryCouponStock(WxPayCouponStockQueryRequest request) throws WxPayException;
  686. /**
  687. * <pre>
  688. * 查询代金券信息.
  689. * 接口请求链接:https://api.mch.weixin.qq.com/mmpaymkttransfers/querycouponsinfo
  690. * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_5
  691. * </pre>
  692. *
  693. * @param request the request
  694. * @return the wx pay coupon info query result
  695. * @throws WxPayException the wx pay exception
  696. */
  697. WxPayCouponInfoQueryResult queryCouponInfo(WxPayCouponInfoQueryRequest request) throws WxPayException;
  698. /**
  699. * 获取微信请求数据,方便接口调用方获取处理.
  700. *
  701. * @return the wx api data
  702. */
  703. WxPayApiData getWxApiData();
  704. /**
  705. * <pre>
  706. * 拉取订单评价数据.
  707. * 商户可以通过该接口拉取用户在微信支付交易记录中针对你的支付记录进行的评价内容。商户可结合商户系统逻辑对该内容数据进行存储、分析、展示、客服回访以及其他使用。如商户业务对评价内容有依赖,可主动引导用户进入微信支付交易记录进行评价。
  708. * 注意:
  709. * 1. 该内容所有权为提供内容的微信用户,商户在使用内容的过程中应遵从用户意愿
  710. * 2. 一次最多拉取200条评价数据,可根据时间区间分批次拉取
  711. * 3. 接口只能拉取最近三个月以内的评价数据
  712. * 接口链接:https://api.mch.weixin.qq.com/billcommentsp/batchquerycomment
  713. * 是否需要证书:需要
  714. * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_17&index=10
  715. * </pre>
  716. *
  717. * @param beginDate 开始时间
  718. * @param endDate 结束时间
  719. * @param offset 位移
  720. * @param limit 条数,建议填null,否则接口会报签名错误
  721. * @return the string
  722. * @throws WxPayException the wx pay exception
  723. */
  724. String queryComment(Date beginDate, Date endDate, Integer offset, Integer limit) throws WxPayException;
  725. /**
  726. * <pre>
  727. * 拉取订单评价数据.
  728. * 商户可以通过该接口拉取用户在微信支付交易记录中针对你的支付记录进行的评价内容。商户可结合商户系统逻辑对该内容数据进行存储、分析、展示、客服回访以及其他使用。如商户业务对评价内容有依赖,可主动引导用户进入微信支付交易记录进行评价。
  729. * 注意:
  730. * 1. 该内容所有权为提供内容的微信用户,商户在使用内容的过程中应遵从用户意愿
  731. * 2. 一次最多拉取200条评价数据,可根据时间区间分批次拉取
  732. * 3. 接口只能拉取最近三个月以内的评价数据
  733. * 接口链接:https://api.mch.weixin.qq.com/billcommentsp/batchquerycomment
  734. * 是否需要证书:需要
  735. * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_17&index=10
  736. * </pre>
  737. *
  738. * @param request 查询请求
  739. * @return the string
  740. * @throws WxPayException the wx pay exception
  741. */
  742. String queryComment(WxPayQueryCommentRequest request) throws WxPayException;
  743. /**
  744. * <pre>
  745. * 获取微信刷脸支付凭证.
  746. * 接口请求链接:https://payapp.weixin.qq.com/face/get_wxpayface_authinfo
  747. * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_5
  748. * </pre>
  749. *
  750. * @param request the request
  751. * @return the wx pay get face authinfo result
  752. * @throws WxPayException the wx pay exception
  753. */
  754. WxPayFaceAuthInfoResult getWxPayFaceAuthInfo(WxPayFaceAuthInfoRequest request) throws WxPayException;
  755. /**
  756. * <pre>
  757. * 提交刷脸支付.
  758. * 文档地址:https://share.weiyun.com/5dxUgCw
  759. * 应用场景:
  760. * 用户在商超,便利店,餐饮等场景,在屏幕上通过刷脸完成支付。
  761. * 步骤1:用户在自助收银机上点击“刷脸支付”;
  762. * 步骤2:发起人脸识别,摄像头自动抓取识别用户人脸,提示用户输入11位手机号码;
  763. * 步骤3:商户收银系统提交刷脸支付;
  764. * 步骤4:微信支付后台收到支付请求,验证人脸信息,返回支付结果给商户收银系统。
  765. * 是否需要证书:不需要。
  766. * </pre>
  767. *
  768. * @param request the request
  769. * @return the wx pay facepay result
  770. * @throws WxPayException the wx pay exception
  771. */
  772. WxPayFacepayResult facepay(WxPayFacepayRequest request) throws WxPayException;
  773. /**
  774. * 查询汇率
  775. * <pre>
  776. * 应用场景:商户网站的商品以外币标价时,通过该接口可以实时查询到微信使用的转换汇率。汇率更新时间为北京时间上午10:00,一天更新一次。
  777. * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/app/app_jw.php?chapter=9_15&index=12
  778. * 接口链接:https://api.mch.weixin.qq.com/pay/queryexchagerate
  779. * </pre>
  780. *
  781. * @param feeType 外币币种
  782. * @param date 日期,格式为yyyyMMdd,如2009年12月25日表示为20091225。时区为GMT+8 beijing
  783. * @return .
  784. * @throws WxPayException .
  785. */
  786. WxPayQueryExchangeRateResult queryExchangeRate(String feeType, String date) throws WxPayException;
  787. }