This repository has been archived on 2020-11-09. You can view files and clone it, but cannot push or open issues or pull requests.
Files
pingan/app/Facades/PingAn/Partner--old.php--
2020-08-06 16:37:53 +08:00

212 lines
6.3 KiB
Plaintext

<?php
namespace App\Facades\PingAn;
use App\Models\Coupon;
use App\Models\User;
use Carbon\Carbon;
class Partner extends PingAn
{
public function action()
{
$this->getToken();
return $this->getAll();
}
/**
* 校验平安券编号
* @param [type] $redemptionCode 平安券编号
* @param [type] $total 订单金额
* @param [type] $user 登陆的用户
* @return [type] [description]
*/
public function checkCode($redemptionCode, $total, $user)
{
$code = $user->code()->where('code', $redemptionCode)->first();
if (!$code) {
return "未找到此项平安券编号";
}
$ticket = explode('-', $redemptionCode);
if (!is_array($ticket) || count($ticket) != 3) {
return "平安券编号码格式不正确";
}
$full = $ticket[1]; //full100
$price = $ticket[2];
preg_match('/(\d{3}(\.\d+)?)/is', $full, $result);
if (!is_array($result)) {
return "平安券编号不正确";
}
if (!is_numeric($total)) {
return "订单金额必须是数字";
}
if ($result[0] > $total) {
return '订单金额不足,平安券编号不可使用。';
}
$res = [
'total' => $result[0],
'price' => $price,
'profit' => $code->profit,
];
return $res;
}
/**
* 通过兑换码查询平安券编号详情V2
* @param [type] $redemptionCode 平安券编号
* @param [type] $total [订单金额]
* @param [type] $user [用户模型]
* @param [type] $outletId [提交的网点id]
* @return [type] [description]
*/
public function coupondetail($redemptionCode, $total, $user, $outletId)
{
//查询网点是否存在
$info = User::where('outlet_id', $outletId)->first();
if (!$info) {
return '网点编号错误';
}
$url = $this->baseUri . 'partner/v2/coupondetail';
$params = [
'redemptionCode' => $redemptionCode,
];
$res = $this->getPingAnData($url, $params);
if (!is_array($res)) {
return $res;
}
if ($res['code'] != 200) {
return $res['message'];
}
$coupon = $res['data'];
if ($coupon['status'] > 0) {
return '平安券编号不可用';
}
$startTime = Carbon::parse($coupon['startTime']);
$endTime = Carbon::parse($coupon['endTime']);
$now = now();
if ($startTime->gt($now)) {
return '平安券编号未开始使用';
}
if ($now->gt($endTime)) {
return '平安券编号已过期';
}
$productItemList = $coupon['productItemList'];
if (!is_array($productItemList) || !is_array($productItemList[0])) {
return '平安券编号数据有误';
}
$thirdPartyGoodsId = $productItemList[0]['thirdPartyGoodsId'] ?? ''; //YSD-full100-25
$productId = $productItemList[0]['productId'] ?? '';
$outletList = $productItemList[0]['outletList'];
if (!is_array($outletList) || !is_array($outletList[0])) {
return '网点信息有误!';
}
$PaOutletId = $outletList[0]['outletNo'];
if (!$thirdPartyGoodsId) {
return '平安券编号id有误';
}
if (!$productId) {
return '商品id有误';
}
$ticket = $this->checkCode($thirdPartyGoodsId, $total, $user);
if (!is_array($ticket)) {
return $ticket;
}
$couponData = [
'user_id' => $user->id,
'outletId' => $outletId,
'productId' => $productId,
'PaOutletId' => $PaOutletId,
'redemptionCode' => $redemptionCode,
'thirdPartyGoodsId' => $thirdPartyGoodsId,
'couponId' => $coupon['couponId'],
'couponName' => $coupon['couponName'],
'price' => $ticket['price'],
'total' => $total,
'profit' => $ticket['profit'],
'status' => $coupon['status'],
'conponType' => $coupon['conponType'],
'startTime' => $coupon['startTime'],
'endTime' => $coupon['endTime'],
];
$couponModel = Coupon::create($couponData);
return $couponModel;
}
/**
* 通过兑换码核销卡卷(直接核销)
* @param [type] $redemptionCode 平安券编号码
* @return [type] [description]
*/
public function freezecoupon($coupon)
{
$params = [
'couponNo' => $coupon->redemptionCode,
'partnerOrderId' => date('ymdHis') . sprintf("%0" . strlen(999999) . "d", mt_rand(0, 999999)),
'outletId' => $coupon->PaOutletId,
'productId' => $coupon->productId,
'timestamp' => $this->getMsecTime(),
];
$url = $this->baseUri . 'partner/redemption';
$str = $this->encrypt($params);
$res = $this->getPingAnData($url, [], ['data' => $str]);
if (!is_array($res)) {
$coupon->remark = $res;
$coupon->status = 3;
$coupon->save();
return $res;
}
if ($res['code'] != 200) {
$coupon->remark = $res['code'] . '--' . $res['message'];
$coupon->status = 3;
$coupon->save();
return $res['message'];
}
$data = $res['data'];
$coupon->remark = $data['message'];
$coupon->partnerOrderId = $params['partnerOrderId'];
$coupon->orderId = $data['orderId'];
$coupon->subOrderId = $data['subOrderId'];
$coupon->totalPoints = $data['totalPoints'];
$coupon->totalAmount = $data['totalAmount'];
$coupon->status = ($data['status'] == 1) ? 2 : 3;
$coupon->save();
//返回的数据
$resdata = [
'price' => $coupon->price,
];
//核销成功 执行分润
$coupon->profit();
return $resdata;
}
}