| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <?php
- namespace app\api\service\order;
- use app\common\library\alipay\AliPay;
- use app\common\library\easywechat\AppOpen;
- use app\common\library\easywechat\AppWx;
- use app\common\library\easywechat\AppMp;
- use app\common\library\easywechat\WxPay;
- use app\common\enum\order\OrderTypeEnum;
- use app\common\enum\order\OrderPayTypeEnum;
- use app\common\library\helper;
- use app\common\model\order\OrderTrade as OrderTradeModel;
- use app\common\service\order\OrderService;
- class PaymentService
- {
- /**
- * 构建订单支付参数
- */
- public static function orderPayment($user, $order, $payType)
- {
- if ($payType == OrderPayTypeEnum::WECHAT) {
- return self::wechat(
- $user,
- $order['order_id'],
- $order['order_no'],
- $order['pay_price'],
- OrderTypeEnum::MASTER
- );
- }
- return [];
- }
- /**
- * 构建微信支付
- */
- public static function wechat(
- $user,
- $order_arr,
- $orderType = OrderTypeEnum::MASTER,
- $pay_source
- )
- {
- // 统一下单API
- $app = null;
- if($pay_source == 'wx'){
- $app = AppWx::getWxPayApp($user['app_id']);
- $open_id = $user['open_id'];
- }else if($pay_source == 'mp'){
- $app = AppMp::getWxPayApp($user['app_id']);
- $open_id = $user['mpopen_id'];
- } else if($pay_source == 'payH5'){
- $app = AppMp::getWxPayApp($user['app_id']);
- $open_id = '';
- } else if($pay_source == 'app'){
- $app = AppOpen::getWxPayApp($user['app_id']);
- $open_id = $user['appopen_id'];
- }
- //如果订单数大于1,则创建外部交易号
- $multiple = 0;
- if(count($order_arr) > 1){
- $orderNo = OrderService::createOrderNo();
- $payPrice = helper::number2(helper::getArrayColumnSum($order_arr, 'pay_price'));
- //记录out_trade_no跟order_id对应关系
- foreach($order_arr as $order){
- $trade_model = new OrderTradeModel;
- $trade_list = [];
- $trade_list[] = [
- 'out_trade_no' => $orderNo,
- 'order_id' => $order['order_id'],
- 'app_id' => $order['app_id']
- ];
- $trade_model->saveAll($trade_list);
- }
- $multiple = 1;
- }else{
- $orderNo = $order_arr[0]['order_no'];
- $payPrice = $order_arr[0]['pay_price'];
- }
- $WxPay = new WxPay($app);
- $payment = $WxPay->unifiedorder($orderNo, $open_id, $payPrice, $orderType, $pay_source, $multiple);
- if($pay_source == 'wx'){
- return $payment;
- }else if($pay_source == 'mp'){
- $jssdk = $app->jssdk;
- return $jssdk->bridgeConfig($payment['prepay_id']);
- }else if($pay_source == 'payH5'){
- return $payment;
- }else if($pay_source == 'app'){
- return $payment;
- }
- }
- /**
- * 构建支付宝支付
- */
- public static function alipay(
- $user,
- $order_arr,
- $orderType = OrderTypeEnum::MASTER,
- $pay_source
- )
- {
- //如果订单数大于1,则创建外部交易号
- $multiple = 0;
- if(count($order_arr) > 1){
- $orderNo = OrderService::createOrderNo();
- $payPrice = helper::number2(helper::getArrayColumnSum($order_arr, 'pay_price'));
- //记录out_trade_no跟order_id对应关系
- foreach($order_arr as $order){
- $trade_model = new OrderTradeModel;
- $trade_list = [];
- $trade_list[] = [
- 'out_trade_no' => $orderNo,
- 'order_id' => $order['order_id'],
- 'app_id' => $order['app_id']
- ];
- $trade_model->saveAll($trade_list);
- }
- $multiple = 1;
- }else{
- $orderNo = $order_arr[0]['order_no'];
- $payPrice = $order_arr[0]['pay_price'];
- }
- $AliPay = new AliPay($pay_source);
- $payment = $AliPay->unifiedorder($orderNo, $payPrice, $orderType, $pay_source, $multiple);
- return $payment;
- }
- }
|