TransferService.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. /**
  3. * 支付宝企业付款服务
  4. * Class TransferService
  5. * Author SHUI
  6. * @package wxpay
  7. */
  8. define('AOP_SDK_DIR', __DIR__);
  9. require_once AOP_SDK_DIR . '/AopSdk.php';
  10. require_once AOP_SDK_DIR . '/AlipayConfig.php';
  11. require_once AOP_SDK_DIR . '/aop/AopClient.php';
  12. require_once AOP_SDK_DIR . '/aop/SignData.php';
  13. require_once AOP_SDK_DIR . '/aop/request/AlipayFundTransToaccountTransferRequest.php';
  14. require_once AOP_SDK_DIR . '/aop/request/AlipayFundTransOrderQueryRequest.php';
  15. class TransferService {
  16. /**
  17. * 商户付款
  18. *
  19. * @access public
  20. *
  21. * @param string $userid 支付宝用户ID
  22. * @param float $amount 付款金额
  23. * @param string $orderid 订单号
  24. *
  25. * @return array
  26. */
  27. public function transfer($userid, $amount, $orderid) {
  28. $aop = new \AopClient;
  29. $aop->gatewayUrl = AlipayConfig::GATEWAY;
  30. $aop->appId = AlipayConfig::APPID;
  31. $aop->rsaPrivateKey = AlipayConfig::APPPRIVATEKEY;
  32. $aop->alipayrsaPublicKey = AlipayConfig::ALIPAYPUBLICKEY;
  33. $aop->apiVersion = '1.0';
  34. $aop->signType = 'RSA2';
  35. $aop->postCharset = 'UTF-8';
  36. $aop->format = 'json';
  37. $param = [
  38. 'out_biz_no' => $orderid,
  39. 'payee_type' => 'ALIPAY_USERID',
  40. 'payee_account' => $userid,
  41. 'amount' => $amount,
  42. 'remark' => '提现转账'
  43. ];
  44. $request = new \AlipayFundTransToaccountTransferRequest;
  45. $request->setBizContent(json_encode($param));
  46. $result = $aop->execute($request);
  47. $responseNode = str_replace('.', '_', $request->getApiMethodName()) . '_response';
  48. $resultCode = $result->$responseNode->code;
  49. if(! empty($resultCode) && $resultCode == 10000){
  50. return ['flag' => 0, 'msg' => '付款成功', 'orderid' => $orderid];
  51. } else if ($resultCode == 20000 || ($resultCode == 40004 && $result->$responseNode->sub_code == 'SYSTEM_ERROR')){
  52. $res = $this->query($orderid);
  53. if (0 == $res['flag']) {
  54. return ['flag' => 0, 'msg' => '付款成功', 'orderid' => $orderid];
  55. } else {
  56. return ['flag' => 1, 'msg' => '付款失败:' . $res['msg']];
  57. }
  58. }
  59. return ['flag' => -1, 'msg' => '付款失败:' . $result->$responseNode->sub_msg];
  60. }
  61. /**
  62. * 订单状态查询
  63. * @param $orderid
  64. * @return array
  65. */
  66. protected function query($orderid) {
  67. $aop = new \AopClient ();
  68. $aop->gatewayUrl = AlipayConfig::GATEWAY;
  69. $aop->appId = AlipayConfig::APPID;
  70. $aop->rsaPrivateKey = AlipayConfig::APPPRIVATEKEY;
  71. $aop->alipayrsaPublicKey = AlipayConfig::ALIPAYPUBLICKEY;
  72. $aop->apiVersion = '1.0';
  73. $aop->signType = 'RSA2';
  74. $aop->postCharset = 'UTF-8';
  75. $aop->format = 'json';
  76. $request = new \AlipayFundTransOrderQueryRequest ();
  77. $param = [
  78. 'out_biz_no' => $orderid
  79. ];
  80. $request->setBizContent(json_encode($param));
  81. $result = $aop->execute ( $request);
  82. $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
  83. $resultCode = $result->$responseNode->code;
  84. if(! empty($resultCode) && $resultCode == 10000){
  85. return ['flag' => 0, 'msg' => '付款成功'];
  86. }
  87. return ['flag' => 1, 'msg' => $result->$responseNode->sub_msg];
  88. }
  89. }