UserCoinController.20190612 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Modes\Order;
  4. use App\Modes\Proxy;
  5. use App\Modes\UserCoin;
  6. use App\Service\PayDispatchService;
  7. use Illuminate\Http\Request;
  8. use App\Http\Controllers\Controller;
  9. use Mockery\Exception;
  10. class UserCoinController extends Controller
  11. {
  12. /**
  13. * 返回汇率比
  14. * @author lyh
  15. * @date 2019/3/28
  16. * @description
  17. */
  18. public function getCoin()
  19. {
  20. $coin = Proxy::getConfig(\Auth::id());
  21. return showJsonSucc('当前用户的点币汇率', [
  22. 'coin' => $coin->coin
  23. ]);
  24. }
  25. /**
  26. * 点币购买
  27. * @author lyh
  28. * @date 2019/3/28
  29. * @description
  30. */
  31. public function buy(Request $request)
  32. {
  33. $validator = \Validator::make($param = $request->all(), [
  34. // 'coin' => 'required|numeric',
  35. 'number' => 'required|integer|min:1',
  36. // 'total_price' => 'required|numeric',
  37. 'pay_type' => 'required|integer|between:1,2'
  38. ]);
  39. if ($validator->fails()) {
  40. return showJsonErr($validator->errors()->first());
  41. }
  42. // 1/100=人民币/点币
  43. // 人民币 = 点币数量
  44. $coin = Proxy::getConfig(\Auth::id())->coin;
  45. // 价格 = 数量/点币汇率
  46. $param['total_price'] = round($param['number'] / $coin, 2);
  47. // 获取支付信息
  48. $orderNo = Order::makeOrderNo();
  49. $pay = PayDispatchService::dispatch($param['pay_type']);
  50. // 获取支付信息
  51. // $payData = $pay->getPayInfo($orderNo, $param['total_price'], \Auth::user()->mobile . '点币购买');
  52. $payData = $pay->getPayInfo($orderNo, 0.01, \Auth::user()->mobile . '点币购买');//测试
  53. try {
  54. // todo 生成支付订单、并返回参数
  55. $orderData = [
  56. 'uid' => \Auth::id(),
  57. 'type' => 3,
  58. 'order_no' => $orderNo,
  59. 'pay_no' => $pay_no = $orderNo,
  60. 'price' => $param['total_price'],
  61. 'is_pay' => 0,
  62. 'pay_type' => $param['pay_type'],
  63. 'status' => 2,
  64. ];
  65. if (empty($order_id = Order::insertGetId($orderData))) {
  66. \DB::rollBack();
  67. return showJsonErr('生成订单失败');
  68. }
  69. UserCoin::insertGetId([
  70. 'uid' => \Auth::id(),
  71. 'order_id' => $order_id,
  72. 'price' => round(1 / $coin, 2), // 单价
  73. 'num' => $param['number'], // 数量
  74. 'total_price' => $param['total_price'], // 总价
  75. 'coin_parities' => $coin, // 汇率
  76. 'pay_type' => $param['pay_type']
  77. ]);
  78. \DB::commit();
  79. if ($param['pay_type'] == 2) {
  80. return $payData;
  81. }
  82. return showJsonSucc('提交购买点币成功', [
  83. 'payData' => $payData
  84. ]);
  85. } catch (Exception $exception) {
  86. \DB::rollBack();
  87. return showJsonErr('购买点币失败', [
  88. 'message' => $exception->getMessage()
  89. ]);
  90. }
  91. }
  92. }