CreditPay.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 2017/3/24
  6. * Time: 下午12:42
  7. */
  8. namespace app\common\services;
  9. use app\backend\modules\member\models\MemberRelation;
  10. use app\common\models\finance\Balance;
  11. use app\common\models\PayOrder;
  12. use app\common\models\PayRefundOrder;
  13. use app\common\services\finance\BalanceChange;
  14. use app\frontend\modules\finance\services\BalanceService;
  15. use app\common\models\OrderPay;
  16. use app\common\models\PayType;
  17. use app\common\services\credit\ConstService;
  18. class CreditPay extends Pay
  19. {
  20. public function doPay($params = [])
  21. {
  22. $operation = '余额订单支付 订单号:' . $params['order_no'];
  23. $this->log($params['extra']['type'], '余额', $params['amount'], $operation, $params['order_no'], Pay::ORDER_STATUS_NON, $params['member_id']);
  24. self::payRequestDataLog($params['order_no'], $params['extra']['type'], '余额', json_encode($params));
  25. //切换新余额接口,原接口废弃
  26. $data = [
  27. 'member_id' => $params['member_id'],
  28. 'remark' => $params['remark'] ?: '',
  29. 'relation' => $params['order_no'],
  30. 'operator' => $params['operator'] ?: 0,
  31. 'operator_id' => $params['operator_id'] ?: 0,
  32. 'change_value' => $params['amount']
  33. ];
  34. $result = (new BalanceChange())->consume($data);
  35. if ($result === true) {
  36. $pay_order_model = PayOrder::uniacid()->where('out_order_no', $params['order_no'])->first();
  37. if ($pay_order_model) {
  38. $pay_order_model->status = 2;
  39. $pay_order_model->trade_no = $params['trade_no'];
  40. $pay_order_model->third_type = '余额';
  41. $pay_order_model->save();
  42. }
  43. return true;
  44. } else {
  45. return false;
  46. }
  47. }
  48. public function doRefund($out_trade_no, $totalmoney, $refundmoney)
  49. {
  50. $order_pay = OrderPay::select(['id','uid'])
  51. ->where('pay_sn', $out_trade_no)
  52. ->first();
  53. $pay_uid = $order_pay->uid;
  54. $return_rd = $this->createOrderRD();
  55. //退款记录
  56. PayRefundOrder::create([
  57. 'uniacid' => \YunShop::app()->uniacid,
  58. 'member_id' => 0,
  59. 'int_order_no' => '',
  60. 'out_order_no' => $out_trade_no,
  61. 'status' => 2,
  62. 'type' => '余额',
  63. 'trade_no' => 0,
  64. 'price' => $refundmoney
  65. ]);
  66. $data = [
  67. 'member_id' => $pay_uid,
  68. 'remark' => '余额订单退款 订单号:(' . $out_trade_no . ')退款单号:(' . $return_rd . ')退款金额:' . $refundmoney,
  69. 'source' => ConstService::SOURCE_CANCEL_CONSUME,
  70. 'relation' => $return_rd,
  71. 'operator' => ConstService::OPERATOR_ORDER,
  72. 'operator_id' => $pay_uid,
  73. 'change_value' => $refundmoney
  74. ];
  75. //判断是否代付
  76. if ($order_pay->behalfPay) {
  77. $data['member_id'] = $order_pay->behalfPay->behalf_id;
  78. $data['remark'] .= "(代付退款)";
  79. }
  80. return $result = (new BalanceChange())->cancelConsume($data);
  81. }
  82. /**
  83. * 生成唯一单号
  84. * @return string
  85. */
  86. public function createOrderRD()
  87. {
  88. $ordersn = createNo('RD', true);
  89. while (1) {
  90. if (!Balance::ofOrderSn($ordersn)->first()) {
  91. break;
  92. }
  93. $ordersn = createNo('RD', true);
  94. }
  95. return $ordersn;
  96. }
  97. public function doWithdraw($member_id, $out_trade_no, $money, $desc, $type = 1)
  98. {
  99. if($money <= 0) return ['errno' => 1,'message' => '提现金额不能小于1元'];
  100. switch ($type){
  101. case 1:
  102. $type = '供应商';
  103. break;
  104. default:
  105. $type = '';
  106. break;
  107. }
  108. $data = array(
  109. 'member_id' => $member_id,
  110. 'remark' => $type . '余额提现: uid 为 ' . $member_id . ' 的用户, 获得余额 ' . $money . '元',
  111. 'source' => ConstService::SOURCE_INCOME,
  112. 'relation' => '',
  113. 'operator' => ConstService::OPERATOR_SHOP,
  114. 'operator_id' => $member_id,
  115. 'change_value' => $money,
  116. );
  117. $op = "{$type}余额提现 订单号:{$out_trade_no},提现金额:{$money}";
  118. try {
  119. (new BalanceChange())->income($data);
  120. $this->withdrawlog(Pay::PAY_TYPE_WITHDRAW,$type . '余额提现',$money,$op,$out_trade_no,Pay::ORDER_STATUS_COMPLETE,$member_id);
  121. } catch (\Exception $e) {
  122. return ['errno' => 1,'message' => $e->getMessage()];
  123. }
  124. return ['errno' => 0,'message' => '余额提现成功'];
  125. }
  126. public function buildRequestSign()
  127. {
  128. // TODO: Implement buildRequestSign() method.
  129. }
  130. }