Yzy.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace App\Components;
  3. use App\Http\Models\Config;
  4. use Cache;
  5. use Log;
  6. class Yzy
  7. {
  8. protected static $systemConfig;
  9. protected static $accessToken;
  10. function __construct()
  11. {
  12. self::$systemConfig = Helpers::systemConfig();
  13. self::$accessToken = $this->getAccessToken();
  14. }
  15. // 获取accessToken
  16. public function getAccessToken()
  17. {
  18. if (Cache::has('YZY_TOKEN')) {
  19. $token = Cache::get('YZY_TOKEN');
  20. if (!isset($token['error'])) {
  21. return Cache::get('YZY_TOKEN')['access_token'];
  22. }
  23. Cache::forget('YZY_TOKEN');
  24. }
  25. $token = (new \Youzan\Open\Token(self::$systemConfig['youzan_client_id'], self::$systemConfig['youzan_client_secret']))->getToken('self', ['kdt_id' => self::$systemConfig['kdt_id']]);
  26. if (isset($token['error'])) {
  27. Log::info('获取有赞云支付access_token失败:' . $token['error_description']);
  28. return '';
  29. } else {
  30. Cache::put('YZY_TOKEN', $token, 180);
  31. return $token['access_token'];
  32. }
  33. }
  34. // 生成收款二维码
  35. public function createQrCode($goodsName, $price, $orderSn)
  36. {
  37. $client = new \Youzan\Open\Client(self::$accessToken);
  38. $params = [
  39. 'qr_name' => $goodsName, // 商品名
  40. 'qr_price' => $price, // 单位分
  41. 'qr_source' => $orderSn, // 本地订单号
  42. 'qr_type' => 'QR_TYPE_DYNAMIC'
  43. ];
  44. return $client->get('youzan.pay.qrcode.create', '3.0.0', $params);
  45. }
  46. // 通过tid获取交易信息
  47. public function getTradeByTid($tid)
  48. {
  49. $client = new \Youzan\Open\Client(self::$accessToken);
  50. return $client->post('youzan.trade.get', '4.0.0', ['tid' => $tid]);
  51. }
  52. // 通过二维码ID获取已支付的交易信息
  53. public function getTradeByQrId($qr_id)
  54. {
  55. $client = new \Youzan\Open\Client(self::$accessToken);
  56. return $client->post('youzan.trades.qr.get', '3.0.0', ['qr_id' => $qr_id, 'status' => 'TRADE_RECEIVED']);
  57. }
  58. }