ZaPay.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. namespace app\api\model\order;
  3. use app\api\model\member\GoldRice as GoldRiceModel;
  4. use app\common\service\Order;
  5. use app\common\enum\OrderType as OrderTypeEnum;
  6. use app\api\model\User as UserModel;
  7. use app\api\model\Order as OrderModel;
  8. use app\common\model\OrderGoods as OrderGoodsModel;
  9. use app\common\enum\order\OrderSource as OrderSourceEnum;
  10. use app\common\enum\order\PayStatus as PayStatusEnum;
  11. use app\common\enum\order\OrderStatus as OrderStatusEnum;
  12. use app\common\enum\order\DeliveryType as DeliveryTypeEnum;
  13. use app\api\model\Goods as GoodsModel;
  14. use app\api\model\GoodsSku as GoodsSkuModel;
  15. use app\common\enum\order\PayType as OrderPayTypeEnum;
  16. use app\common\library\helper;
  17. use app\common\model\OrderAddress as OrderAddressModel;
  18. use app\common\service\goods\source\Factory as StockFactory;
  19. use think\facade\Db;
  20. use app\api\model\card\UserRiceCard as UserRiceCardModel;
  21. use app\api\model\card\UserRiceCardConsume as UserRiceCardConsumeModel;
  22. use app\api\model\subscribe\WechatSub;
  23. use app\common\service\commission\RecordWaitCommission;
  24. use app\api\model\za\ZaActivityRelation;
  25. class ZaPay implements IOrder {
  26. private $error = '';
  27. public function getError(){
  28. return $this->error;
  29. }
  30. public function prePay($args){
  31. }
  32. //重新支付
  33. public function repay($args){
  34. }
  35. //回调逻辑处理
  36. public function notifyPay($pay_data){
  37. $order_no = $pay_data['out_trade_no'];
  38. $model = OrderModel::getPayDetail($order_no);
  39. if(empty($model)){
  40. return false;
  41. }
  42. //已支付
  43. if($model['pay_status']==20){
  44. return false;
  45. }
  46. $user = UserModel::detail($model['user_id']);
  47. // Db::startTrans();
  48. $res = $model->transaction(function () use ($model,$pay_data,$user) {
  49. $model->save([
  50. 'pay_status'=> 20,
  51. 'pay_time' => time(),
  52. 'transaction_id'=>$pay_data['transaction_id']??''
  53. ]
  54. );
  55. //写入金米粒记录
  56. $this->writeUserGoldRice($model);
  57. $this->writeUserRiceCard($model);//写入金米粒逻辑
  58. $order_id = $model['order_id'];
  59. ZaActivityRelation::where("order_id",$order_id)->update(['is_pay'=>1]);
  60. return true;
  61. });
  62. return $res;
  63. }
  64. /**
  65. * 写入金米粒记录
  66. * @param int $payType
  67. * @return false|int
  68. * @throws \Exception
  69. */
  70. private function writeUserGoldRice($model)
  71. {
  72. if($model['gold_rice_amount']>0){
  73. //写金米粒出账记录
  74. GoldRiceModel::add($model['user_id'],$model['order_no'],'下单抵扣',$model['gold_rice_amount'],0);
  75. //扣除冻结中的金米粒
  76. UserModel::setDecByField($model['user_id'],'gold_rice_frozen',(float)$model['gold_rice_amount']);
  77. }
  78. }
  79. /**
  80. * 写入米卡记录
  81. * @param int $payType
  82. * @return false|int
  83. * @throws \Exception
  84. */
  85. private function writeUserRiceCard($help){
  86. if($help['rice_card_id']>0){
  87. //写现金卡出账记录
  88. $userRiceCard = UserRiceCardModel::find($help['rice_card_id']);
  89. UserRiceCardConsumeModel::add($userRiceCard,$help['order_no'],$help['pay_money'],$help['rice_card_money']);
  90. //如果可用余额为0并且冻结余额等于要抵扣的金额
  91. if($userRiceCard['balance']==0 && $help['rice_card_money']==$userRiceCard['frozen_amount']){
  92. //现金卡直接减冻结余额,并且状态改为已失效
  93. UserRiceCardModel::setIncDecByField($help['rice_card_id'],[],['frozen_amount'=>(float)$help['rice_card_money']],['effect_state'=>2]);
  94. }else{
  95. //现金卡直接减冻结余额
  96. UserRiceCardModel::setDecByField($help['rice_card_id'],'frozen_amount',(float)$help['rice_card_money']);
  97. }
  98. }
  99. }
  100. }