AlipayRoyaltyService.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: yunzhong
  5. * Date: 2019/12/11
  6. * Time: 10:57
  7. */
  8. namespace app\common\services\alipay;
  9. use app\common\exceptions\ShopException;
  10. use app\common\modules\alipay\models\AlipayOrderSettleLog;
  11. use app\common\services\alipay\f2fpay\model\AlipayConfig;
  12. use app\common\services\alipay\f2fpay\model\builder\AlipayOrderSettleContentBuilder;
  13. use app\common\services\alipay\f2fpay\model\builder\AlipayRoyaltyContentBuilder;
  14. use app\common\services\alipay\f2fpay\model\builder\AlipayTradeQueryContentBuilder;
  15. use app\common\services\alipay\f2fpay\service\AlipayTradeService;
  16. use Yunshop\FacePayment\common\models\RoyaltyModel;
  17. class AlipayRoyaltyService
  18. {
  19. /**
  20. * @param string $app_auth_token
  21. * @return array
  22. * @throws \Exception
  23. * @throws \app\common\exceptions\AppException
  24. */
  25. public static function bind($app_auth_token = '')
  26. {
  27. $config = (new AlipayConfig())->getConfig();
  28. $out_request_no = createNo('AR', true);
  29. $receiver_list = [
  30. [
  31. 'type' => 'userId',
  32. 'account' => $config['pid'],
  33. 'name' => $config['name'],
  34. 'memo' => '门店分账',
  35. ]
  36. ];
  37. $barRoyaltyRequestBuilder = new AlipayRoyaltyContentBuilder();
  38. $barRoyaltyRequestBuilder->setAppAuthToken($app_auth_token);
  39. $barRoyaltyRequestBuilder->setOutRequestNo($out_request_no);
  40. $barRoyaltyRequestBuilder->setReceiverList($receiver_list);
  41. $req = new AlipayTradeService($config);
  42. $barPayResult = (array)$req->royaltyBind($barRoyaltyRequestBuilder);
  43. if ($barPayResult['code'] != '10000') {
  44. throw new ShopException($barPayResult['sub_msg']);
  45. }
  46. $royalty_data = [
  47. 'uniacid' => \YunShop::app()->uniacid,
  48. 'app_id' => $config['app_id'],
  49. 'account' => $receiver_list[0]['account'],
  50. 'name' => $config['name'],
  51. 'type' => $receiver_list[0]['type'],
  52. ];
  53. RoyaltyModel::create($royalty_data);
  54. return $barPayResult;
  55. }
  56. /**
  57. * @param $amount
  58. * @param $order_id
  59. * @param $trade_no
  60. * @return mixed
  61. * @throws ShopException
  62. * @throws \Exception
  63. * @throws \app\common\exceptions\AppException
  64. */
  65. public static function orderSettle($amount, $trade_no, $order_id)
  66. {
  67. $out_request_no = createNo('AOS', true);
  68. $alipay_config = new AlipayConfig();
  69. $config = $alipay_config->getConfig();
  70. $app_auth_token = $alipay_config->getAuthToken();
  71. $receiver_list = [
  72. [
  73. 'royalty_type' => 'transfer',
  74. // 'trans_out' => '2088821697943454',
  75. // 'trans_out_type' => 'userId',
  76. 'trans_in_type' => 'userId',
  77. 'trans_in' => $config['pid'],
  78. 'amount' => round($amount,2),
  79. // 'desc' => '分账给服务商',
  80. ]
  81. ];
  82. $extendParams = ['royalty_finish' => true];
  83. $orderSettleRequestBuilder = new AlipayOrderSettleContentBuilder();
  84. $orderSettleRequestBuilder->setAppAuthToken($app_auth_token);
  85. $orderSettleRequestBuilder->setOutRequestNo($out_request_no);
  86. $orderSettleRequestBuilder->setTradeNo($trade_no);
  87. $orderSettleRequestBuilder->setRoyaltyParameters($receiver_list);
  88. $orderSettleRequestBuilder->setExtendParams($extendParams);
  89. $req = new AlipayTradeService($config);
  90. $barPayResult = (array)$req->tradeOrderSettle($orderSettleRequestBuilder);
  91. // $queryContentBuilder = new AlipayTradeQueryContentBuilder();
  92. // $queryContentBuilder->setTradeNo($trade_no);
  93. // $queryContentBuilder->setQueryOptions(['TRADE_SETTLE_INFO']);
  94. // $queryContentBuilder->setAppAuthToken($app_auth_token);
  95. // $req = new AlipayTradeService($config);
  96. // $queryResponse = (array)$req->query($queryContentBuilder);
  97. // dd($queryResponse);
  98. $data = [
  99. 'app_id' => $config['app_id'],
  100. 'uniacid' => \YunShop::app()->uniacid,
  101. 'order_id' => $order_id,
  102. 'app_auth_token' => $app_auth_token,
  103. 'out_request_no' => $out_request_no,
  104. 'trade_no' => $trade_no,
  105. ];
  106. if ($barPayResult['code'] == '10000') {
  107. $data['status'] = 1;
  108. $data['message'] = $barPayResult['msg'];
  109. } else {
  110. $data['status'] = -1;
  111. $data['message'] = $barPayResult['sub_msg'];
  112. }
  113. $create_data = array_merge($data,$receiver_list[0]);
  114. AlipayOrderSettleLog::create($create_data);
  115. return $barPayResult;
  116. }
  117. /**
  118. * @param $order_id
  119. * @param $trade_no
  120. * @return mixed
  121. * @throws ShopException
  122. * @throws \Exception
  123. * @throws \app\common\exceptions\AppException
  124. */
  125. public static function orderRoyaltyFinish($trade_no, $order_id)
  126. {
  127. $out_request_no = createNo('AOS', true);
  128. $alipay_config = new AlipayConfig();
  129. $config = $alipay_config->getConfig();
  130. $app_auth_token = $alipay_config->getAuthToken();
  131. $extendParams = ['royalty_finish' => true];
  132. $orderSettleRequestBuilder = new AlipayOrderSettleContentBuilder();
  133. $orderSettleRequestBuilder->setAppAuthToken($app_auth_token);
  134. $orderSettleRequestBuilder->setOutRequestNo($out_request_no);
  135. $orderSettleRequestBuilder->setTradeNo($trade_no);
  136. $orderSettleRequestBuilder->setExtendParams($extendParams);
  137. $req = new AlipayTradeService($config);
  138. $barPayResult = (array)$req->tradeOrderSettle($orderSettleRequestBuilder);
  139. \Log::debug('完结分账回调', $barPayResult);
  140. $data = [
  141. 'app_id' => $config['app_id'],
  142. 'uniacid' => \YunShop::app()->uniacid,
  143. 'order_id' => $order_id,
  144. 'app_auth_token' => $app_auth_token,
  145. 'out_request_no' => $out_request_no,
  146. 'trade_no' => $trade_no,
  147. ];
  148. if ($barPayResult['code'] == '10000') {
  149. $data['status'] = 1;
  150. $data['message'] = $barPayResult['msg'];
  151. } else {
  152. $data['status'] = -1;
  153. $data['message'] = $barPayResult['sub_msg'];
  154. }
  155. $create_data = $data;
  156. $create_data['amount'] = 0;
  157. $create_data['royalty_type'] = '完结分账';
  158. AlipayOrderSettleLog::create($create_data);
  159. return $barPayResult;
  160. }
  161. }