Yzy.php 1.8 KB

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