WxPayApi.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. <?php
  2. namespace App\libs\wechat\wxpay;
  3. use lc\wechat\wxpay\base\WxPayHelper;
  4. use lc\wechat\wxpay\base\WxPayException;
  5. use lc\wechat\wxpay\base\WxPayConfig;
  6. use Illuminate\Support\Facades\Config;
  7. /**
  8. * 微信支付类
  9. * 接口访问类,包含所有微信支付API列表的封装,类中方法为static方法,
  10. * 每个接口有默认超时时间(除提交被扫支付为10s,上报超时时间为1s外,其他均为6s).
  11. */
  12. class WxPayApi
  13. {
  14. /**
  15. * 企业付款到零钱(用于企业向微信用户个人付款).
  16. *
  17. * @param array $params 接口请求参数
  18. *
  19. * @return array
  20. *
  21. * @throws base\WxPayException
  22. */
  23. public static function payToBalance(array $params)
  24. {
  25. $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
  26. new WxPayConfig();
  27. $base = [
  28. 'mch_appid' => Config::get('lc.wxpay.appid', WxPayConfig::$appId),
  29. 'mchid' => WxPayConfig::$mchId,
  30. 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
  31. 'nonce_str' => uniqid(),
  32. ];
  33. $params = array_merge($base, $params);
  34. return WxPayHelper::sendRedPackRequest(1, $url, array_merge($base, $params));
  35. }
  36. /**
  37. * 查询企业付款到零钱(用于企业向微信用户个人付款).
  38. *
  39. * @param array $params 接口请求参数
  40. *
  41. * @return array
  42. *
  43. * @throws base\WxPayException
  44. */
  45. public static function queryBalance(array $params)
  46. {
  47. $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo';
  48. new WxPayConfig();
  49. $base = [
  50. 'appid' => Config::get('lc.wxpay.appid', WxPayConfig::$appId),
  51. 'mch_id' => WxPayConfig::$mchId,
  52. 'nonce_str' => uniqid(),
  53. ];
  54. $params = array_merge($base, $params);
  55. return WxPayHelper::queryRequest(1, $url, array_merge($base, $params));
  56. }
  57. /**
  58. * 查询现金红包红包记录.
  59. *
  60. * @param array $params 接口请求参数
  61. *
  62. * @return array
  63. *
  64. * @throws base\WxPayException
  65. */
  66. public static function queryRedPack(array $params)
  67. {
  68. $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo';
  69. new WxPayConfig();
  70. $base = [
  71. 'appid' => Config::get('lc.wxpay.appid', WxPayConfig::$appId),
  72. 'mch_id' => WxPayConfig::$mchId,
  73. 'nonce_str' => uniqid(),
  74. 'bill_type' => 'MCHT',
  75. ];
  76. $params = array_merge($base, $params);
  77. return WxPayHelper::queryRequest(2, $url, array_merge($base, $params));
  78. }
  79. /**
  80. * 发放现金红包.
  81. *
  82. * @param array $params 接口请求参数
  83. *
  84. * @return array
  85. *
  86. * @throws WxPayException
  87. */
  88. public static function sendRedPack(array $params)
  89. {
  90. $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
  91. new WxPayConfig();
  92. $base = [
  93. 'wxappid' => Config::get('lc.wxpay.appid', WxPayConfig::$appId),
  94. 'mch_id' => WxPayConfig::$mchId,
  95. 'client_ip' => $_SERVER['REMOTE_ADDR'],
  96. 'nonce_str' => uniqid(),
  97. ];
  98. $params = array_merge($base, $params);
  99. return WxPayHelper::sendRedPackRequest(2, $url, array_merge($base, $params));
  100. }
  101. /**
  102. * 微信支付统一下单.
  103. *
  104. * @param array $params 接口请求参数
  105. *
  106. * @return array
  107. *
  108. * @throws WxPayException
  109. */
  110. public static function unifiedOrder(array $params)
  111. {
  112. $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
  113. new WxPayConfig();
  114. $base = [
  115. 'appid' => Config::get('lc.wxpay.appid', WxPayConfig::$appId),
  116. 'mch_id' => WxPayConfig::$mchId,
  117. 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
  118. 'nonce_str' => uniqid(),
  119. ];
  120. return WxPayHelper::sendUnifyRequest($url, array_merge($base, $params), 'unifiedOrder');
  121. }
  122. /**
  123. * 查询订单.
  124. *
  125. * @param string $transactionId 微信订单号
  126. *
  127. * @return array
  128. *
  129. * @throws WxPayException
  130. */
  131. public static function queryByTransactionId(string $transactionId)
  132. {
  133. return self::queryOrder(['transaction_id' => $transactionId]);
  134. }
  135. /**
  136. * 查询订单.
  137. *
  138. * @param string $outTradeNo 商户订单号
  139. *
  140. * @return array
  141. *
  142. * @throws WxPayException
  143. */
  144. public static function queryByOutTradeNumber(string $outTradeNo)
  145. {
  146. return self::queryOrder(['out_trade_no' => $outTradeNo]);
  147. }
  148. /**
  149. * 申请退款.
  150. *
  151. * @param string $transactionId 微信订单号
  152. * @param array $params 接口请求参数
  153. *
  154. * @return array
  155. *
  156. * @throws WxPayException
  157. */
  158. public static function refundByTransactionId(string $transactionId, array $params)
  159. {
  160. return self::refund(array_merge(['transaction_id' => $transactionId], $params));
  161. }
  162. /**
  163. * 申请退款.
  164. *
  165. * @param string $outTradeNo 微信订单号
  166. * @param array $params 接口请求参数
  167. *
  168. * @return array
  169. *
  170. * @throws WxPayException
  171. */
  172. public static function refundByOutTradeNumber(string $outTradeNo, array $params)
  173. {
  174. return self::refund(array_merge(['out_trade_no' => $outTradeNo], $params));
  175. }
  176. /**
  177. * 微信订单号退款查询.
  178. *
  179. * @param string $transactionId 微信订单号
  180. *
  181. * @return array
  182. *
  183. * @throws WxPayException
  184. */
  185. public static function queryRefundByTransactionId(string $transactionId)
  186. {
  187. return self::refundQuery(['transaction_id' => $transactionId]);
  188. }
  189. /**
  190. * 商户订单号退款查询.
  191. *
  192. * @param string $outTradeNo 商户订单号
  193. *
  194. * @return array
  195. *
  196. * @throws WxPayException
  197. */
  198. public static function queryRefundByOutTradeNumber(string $outTradeNo)
  199. {
  200. return self::refundQuery(['out_trade_no' => $outTradeNo]);
  201. }
  202. /**
  203. * 商户退款单号退款查询.
  204. *
  205. * @param string $outRefundNo 商户退款单号
  206. *
  207. * @return array
  208. *
  209. * @throws WxPayException
  210. */
  211. public static function queryRefundByOutRefundNumber(string $outRefundNo)
  212. {
  213. return self::refundQuery(['out_refund_no' => $outRefundNo]);
  214. }
  215. /**
  216. * 微信退款单号退款查询.
  217. *
  218. * @return array
  219. *
  220. * @throws WxPayException
  221. */
  222. public static function queryRefundByRefundId(string $refundId)
  223. {
  224. return self::refundQuery(['refund_id' => $refundId]);
  225. }
  226. /**
  227. * 微信支付订单查询.
  228. *
  229. * @param array $params 接口请求参数
  230. *
  231. * @return array
  232. *
  233. * @throws WxPayException
  234. */
  235. private static function queryOrder(array $params)
  236. {
  237. $url = 'https://api.mch.weixin.qq.com/pay/orderquery';
  238. new WxPayConfig();
  239. $base = [
  240. 'appid' => Config::get('lc.wxpay.appid', WxPayConfig::$appId),
  241. 'mch_id' => WxPayConfig::$mchId,
  242. 'nonce_str' => uniqid(),
  243. ];
  244. return WxPayHelper::sendUnifyRequest($url, array_merge($base, $params), 'queryOrder');
  245. }
  246. /**
  247. * 微信支付关闭订单.
  248. *
  249. * @param string $outTradeNo 订单号
  250. *
  251. * @return array
  252. *
  253. * @throws WxPayException
  254. */
  255. public static function closeOrder(string $outTradeNo)
  256. {
  257. $url = 'https://api.mch.weixin.qq.com/pay/closeorder';
  258. new WxPayConfig();
  259. $params = [
  260. 'appid' => Config::get('lc.wxpay.appid', WxPayConfig::$appId),
  261. 'mch_id' => WxPayConfig::$mchId,
  262. 'nonce_str' => uniqid(),
  263. 'out_trade_no' => $outTradeNo,
  264. ];
  265. return WxPayHelper::sendUnifyRequest($url, $params, 'closeOrder');
  266. }
  267. /**
  268. * 微信支付申请退款.
  269. *
  270. * @param array $params 接口请求参数
  271. *
  272. * @return array
  273. *
  274. * @throws WxPayException
  275. */
  276. private static function refund(array $params)
  277. {
  278. $url = 'https://api.mch.weixin.qq.com/secapi/pay/refund';
  279. new WxPayConfig();
  280. $base = [
  281. 'appid' => Config::get('lc.wxpay.appid', WxPayConfig::$appId),
  282. 'mch_id' => WxPayConfig::$mchId,
  283. 'nonce_str' => uniqid(),
  284. ];
  285. $params = array_merge($base, $params);
  286. return WxPayHelper::sendUnifyRequest($url, $params, 'refund');
  287. }
  288. /**
  289. * 微信支付退款查询.
  290. *
  291. * @param array $params 接口请求参数
  292. *
  293. * @return array
  294. *
  295. * @throws WxPayException
  296. */
  297. private static function refundQuery(array $params)
  298. {
  299. $url = 'https://api.mch.weixin.qq.com/pay/refundquery';
  300. new WxPayConfig();
  301. $base = [
  302. 'appid' => Config::get('lc.wxpay.appid', WxPayConfig::$appId),
  303. 'mch_id' => WxPayConfig::$mchId,
  304. 'nonce_str' => uniqid(),
  305. ];
  306. $params = array_merge($base, $params);
  307. return WxPayHelper::sendUnifyRequest($url, $params, 'refundQuery');
  308. }
  309. /**
  310. * 微信发送商家优惠券.
  311. *
  312. * @return array
  313. */
  314. public static function unifiedOrderForCoupon(array $params)
  315. {
  316. $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/send_coupon';
  317. new WxPayConfig();
  318. $base = [
  319. 'appid' => Config::get('lc.wxpay.appid', WxPayConfig::$appId),
  320. 'mch_id' => WxPayConfig::$mchId,
  321. 'nonce_str' => uniqid(),
  322. ];
  323. return WxPayHelper::sendUnifyRequest($url, array_merge($base, $params), 'send_coupon');
  324. }
  325. /**
  326. * 企业微信发送红包(付款到零钱).
  327. *
  328. * @return array
  329. */
  330. public static function qywxSendBalance(array $params)
  331. {
  332. }
  333. }