123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- <?php
- /**
- *
- *
- * @category xxx
- * @package PSR
- * @subpackage Documentation\API
- * @author xxx <xxx@xxx.com>
- * @license GPL https://xxx.com
- * @link https://xxx.com
- * @ctime: 2020/4/30 15:57
- */
- namespace App\Http\Controllers\V1;
- use App\Http\Requests\DepositCardRequest;
- use App\Http\Requests\DepositCardsRequest;
- use App\Jobs\CloseDepositCardOrderJob;
- use App\Models\Auth;
- use App\Models\DepositCardOrder;
- use App\Repositories\DepositCardRepository;
- use App\Transformers\DepositCardTransformer;
- use Carbon\Carbon;
- use EasyWeChat\Factory;
- use Illuminate\Support\Facades\DB;
- use function EasyWeChat\Kernel\Support\generate_sign;
- class DepositCardOrderController extends BaseController
- {
- public function index(DepositCardsRequest $depositCardsRequest, DepositCardRepository $depositCardRepository)
- {
- try {
- $area_id = $depositCardsRequest->get('area_id', 0);
- $depositCards = $depositCardRepository->getDepositCardsByAreaId($area_id);
- return $this->response->collection($depositCards, DepositCardTransformer::class);
- } catch (\Exception $e) {
- return $this->errorNoValidation($e->getMessage());
- }
- }
- public function buyDepositCard(DepositCardRequest $depositCardRequest, DepositCardRepository $depositCardRepository)
- {
- try {
- $id = $depositCardRequest->get('id');
- $area_id = $depositCardRequest->get('area_id');
- if ($depositCardRepository->isStatusOK($id)) return $this->errorNoValidation('此免押金卡暂不售卖');
- $user_id = $this->user->id;
- if (!$depositCardRepository->isCanBuy($user_id)) return $this->errorNoValidation('您已缴纳过押金,无需购买');
- $depositCard = $depositCardRepository->byIdGetModel($id);
- DB::beginTransaction();
- // 1.下单
- switch (self::$SOURCE_TYPE ){
- case self::SOURCE_TYPE_WECHAT:
- $source_type = DepositCardOrder::PAY_TYPE_WECHAT;
- break;
- case self::SOURCE_TYPE_ALIPAY:
- $source_type = DepositCardOrder::PAY_TYPE_ALIPAYMINI;
- break;
- }
- $discount = (bool)$depositCard->is_discount ? $depositCard->discount : 100;
- $money = $depositCard->price;
- $data = [
- 'no' => DepositCardOrder::makeNo(self::$ORDER_TAG),
- 'area_id' => $area_id,
- 'user_id' => $user_id,
- 'deposit_cards_id' => $id,
- 'money' => $money,
- 'effective_days' => $depositCard->effective_days,
- 'discount' => $discount,
- 'pay_money' => bcdiv(bcmul($money, $discount, 2), 100, 2),
- 'pay_type' => $source_type,
- 'pay_status' => DepositCardOrder::PAY_STATUS_NO,
- 'pay_time' => Carbon::now(),
- 'merchant_id' => self::$MERCHANT_ID
- ];
- $depositCardOrder = DepositCardOrder::create($data);
- $this->dispatch(new CloseDepositCardOrderJob($depositCardOrder, Carbon::now()->addMinutes(30)));
- //发起支付
- $user_id = $this->user->id;
- $userauth = userAuthinfo(self::$MERCHANT, $user_id);
- if ($userauth['code'] != 1) {
- return $this->errorNoValidation('用户信息有误');
- }
- switch (self::$SOURCE_TYPE) {
- case self::SOURCE_TYPE_WECHAT:
- $payment = Factory::payment(wechat_pay_config(self::$MERCHANT)); // 微信支付
- $result = $payment->order->unify([
- 'body' => "用户购买免押金卡-" . self::$MERCHANT['wxapp_name'],
- 'out_trade_no' => $depositCardOrder->no,
- 'trade_type' => 'JSAPI', // 必须为JSAPI
- 'openid' => $userauth['data']['credential'], // 这里的openid为付款人的openid
- 'total_fee' => wechat_fee($depositCardOrder->pay_money), // 总价
- 'attach' => makeNoTag(DepositCardOrder::NO_TAG),
- // 'notify_url' => config('app.url').'/api/payments/wechat-rent-notify',
- ]);
- // 如果成功生成统一下单的订单,那么进行二次签名
- if ('SUCCESS' === $result['return_code'] && 'SUCCESS' === $result['result_code']) {
- // 二次签名的参数必须与下面相同
- $params = [
- 'appId' => $userauth['data']['identifier'],
- 'timeStamp' => time(),
- 'nonceStr' => $result['nonce_str'],
- 'package' => 'prepay_id=' . $result['prepay_id'],
- 'signType' => 'MD5',
- ];
- // self::$MERCHANT['pay_key']为商户的key
- $params['paySign'] = generate_sign($params, self::$MERCHANT['pay_key']);
- $params['no'] = $depositCardOrder->no;
- DB::commit();
- return $this->response->array($params);
- }
- break;
- case self::SOURCE_TYPE_ALIPAY:
- $result = alipay_mini_pay(self::$MERCHANT, "用户购买免押金卡-" . self::$MERCHANT['wxapp_name'], $depositCardOrder->no, $depositCardOrder->pay_money, $userauth['data']['credential']);
- // $result = alipay_mini_pay(self::$MERCHANT,"用户购买免押金卡-" . self::$MERCHANT['wxapp_name'],$depositCardOrder->no,0.01,$userauth['data']['credential']);
- if ($result['code'] != 1) {
- return $this->errorNoValidation($result['msg']);
- }
- $response['tradeNo'] = $result['data']->tradeNo; //获取支付宝订单号
- DB::commit();
- return $this->response->array($response);
- break;
- default:
- return $this->errorNoValidation('支付方式错误');
- }
- DB::rollBack();
- return $this->errorNoValidation('下单失败');
- } catch (\Exception $e) {
- DB::rollBack();
- return $this->errorNoValidation($e->getMessage());
- }
- }
- }
|