PaymentService.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace app\api\service\order;
  3. use app\common\library\alipay\AliPay;
  4. use app\common\library\easywechat\AppOpen;
  5. use app\common\library\easywechat\AppWx;
  6. use app\common\library\easywechat\AppMp;
  7. use app\common\library\easywechat\WxPay;
  8. use app\common\enum\order\OrderTypeEnum;
  9. use app\common\enum\order\OrderPayTypeEnum;
  10. use app\common\library\helper;
  11. use app\common\model\order\OrderTrade as OrderTradeModel;
  12. use app\common\service\order\OrderService;
  13. class PaymentService
  14. {
  15. /**
  16. * 构建订单支付参数
  17. */
  18. public static function orderPayment($user, $order, $payType)
  19. {
  20. if ($payType == OrderPayTypeEnum::WECHAT) {
  21. return self::wechat(
  22. $user,
  23. $order['order_id'],
  24. $order['order_no'],
  25. $order['pay_price'],
  26. OrderTypeEnum::MASTER
  27. );
  28. }
  29. return [];
  30. }
  31. /**
  32. * 构建微信支付
  33. */
  34. public static function wechat(
  35. $user,
  36. $order_arr,
  37. $orderType = OrderTypeEnum::MASTER,
  38. $pay_source
  39. )
  40. {
  41. // 统一下单API
  42. $app = null;
  43. if($pay_source == 'wx'){
  44. $app = AppWx::getWxPayApp($user['app_id']);
  45. $open_id = $user['open_id'];
  46. }else if($pay_source == 'mp'){
  47. $app = AppMp::getWxPayApp($user['app_id']);
  48. $open_id = $user['mpopen_id'];
  49. } else if($pay_source == 'payH5'){
  50. $app = AppMp::getWxPayApp($user['app_id']);
  51. $open_id = '';
  52. } else if($pay_source == 'app'){
  53. $app = AppOpen::getWxPayApp($user['app_id']);
  54. $open_id = $user['appopen_id'];
  55. }
  56. //如果订单数大于1,则创建外部交易号
  57. $multiple = 0;
  58. if(count($order_arr) > 1){
  59. $orderNo = OrderService::createOrderNo();
  60. $payPrice = helper::number2(helper::getArrayColumnSum($order_arr, 'pay_price'));
  61. //记录out_trade_no跟order_id对应关系
  62. foreach($order_arr as $order){
  63. $trade_model = new OrderTradeModel;
  64. $trade_list = [];
  65. $trade_list[] = [
  66. 'out_trade_no' => $orderNo,
  67. 'order_id' => $order['order_id'],
  68. 'app_id' => $order['app_id']
  69. ];
  70. $trade_model->saveAll($trade_list);
  71. }
  72. $multiple = 1;
  73. }else{
  74. $orderNo = $order_arr[0]['order_no'];
  75. $payPrice = $order_arr[0]['pay_price'];
  76. }
  77. $WxPay = new WxPay($app);
  78. $payment = $WxPay->unifiedorder($orderNo, $open_id, $payPrice, $orderType, $pay_source, $multiple);
  79. if($pay_source == 'wx'){
  80. return $payment;
  81. }else if($pay_source == 'mp'){
  82. $jssdk = $app->jssdk;
  83. return $jssdk->bridgeConfig($payment['prepay_id']);
  84. }else if($pay_source == 'payH5'){
  85. return $payment;
  86. }else if($pay_source == 'app'){
  87. return $payment;
  88. }
  89. }
  90. /**
  91. * 构建支付宝支付
  92. */
  93. public static function alipay(
  94. $user,
  95. $order_arr,
  96. $orderType = OrderTypeEnum::MASTER,
  97. $pay_source
  98. )
  99. {
  100. //如果订单数大于1,则创建外部交易号
  101. $multiple = 0;
  102. if(count($order_arr) > 1){
  103. $orderNo = OrderService::createOrderNo();
  104. $payPrice = helper::number2(helper::getArrayColumnSum($order_arr, 'pay_price'));
  105. //记录out_trade_no跟order_id对应关系
  106. foreach($order_arr as $order){
  107. $trade_model = new OrderTradeModel;
  108. $trade_list = [];
  109. $trade_list[] = [
  110. 'out_trade_no' => $orderNo,
  111. 'order_id' => $order['order_id'],
  112. 'app_id' => $order['app_id']
  113. ];
  114. $trade_model->saveAll($trade_list);
  115. }
  116. $multiple = 1;
  117. }else{
  118. $orderNo = $order_arr[0]['order_no'];
  119. $payPrice = $order_arr[0]['pay_price'];
  120. }
  121. $AliPay = new AliPay($pay_source);
  122. $payment = $AliPay->unifiedorder($orderNo, $payPrice, $orderType, $pay_source, $multiple);
  123. return $payment;
  124. }
  125. }