find(); else $orderInfo = $orderId; if (!$orderInfo || !isset($orderInfo['paid'])) exception('支付订单不存在!'); if ($orderInfo['paid']) exception('支付已支付!'); if ($orderInfo['pay_price'] <= 0) exception('该支付无需支付!'); $openid = WechatUser::getOpenId($orderInfo['uid']); $bodyContent = StoreOrder::getProductTitle($orderInfo['cart_id']); $site_name = sys_config('site_name'); if (!$bodyContent && !$site_name) exception('支付参数缺少:请前往后台设置->系统设置-> 填写 网站名称'); return MiniProgramService::jsPay($openid, $orderInfo['order_id'], $orderInfo['pay_price'], 'product', StoreOrder::getSubstrUTf8($site_name . ' - ' . $bodyContent, 30)); } /** * 微信公众号JS支付 * @param $orderId * @param string $field * @return array|string * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public static function wxPay($orderId, $field = 'order_id') { if (is_string($orderId)) $orderInfo = StoreOrder::where($field, $orderId)->find(); else $orderInfo = $orderId; if (!$orderInfo || !isset($orderInfo['paid'])) exception('支付订单不存在!'); if ($orderInfo['paid']) exception('支付已支付!'); if ($orderInfo['pay_price'] <= 0) exception('该支付无需支付!'); $openid = WechatUser::uidToOpenid($orderInfo['uid'], 'openid'); $bodyContent = StoreOrder::getProductTitle($orderInfo['cart_id']); $site_name = sys_config('site_name'); if (!$bodyContent && !$site_name) exception('支付参数缺少:请前往后台设置->系统设置-> 填写 网站名称'); return WechatService::jsPay($openid, $orderInfo['order_id'], $orderInfo['pay_price'], 'product', StoreOrder::getSubstrUTf8($site_name . ' - ' . $bodyContent, 30)); } /** * 微信h5支付 * @param $orderId * @param string $field * @return array|string * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public static function h5Pay($orderId, $field = 'order_id') { if (is_string($orderId)) $orderInfo = StoreOrder::where($field, $orderId)->find(); else $orderInfo = $orderId; if (!$orderInfo || !isset($orderInfo['paid'])) exception('支付订单不存在!'); if ($orderInfo['paid']) exception('支付已支付!'); if ($orderInfo['pay_price'] <= 0) exception('该支付无需支付!'); $bodyContent = StoreOrder::getProductTitle($orderInfo['cart_id']); $site_name = sys_config('site_name'); if (!$bodyContent && !$site_name) exception('支付参数缺少:请前往后台设置->系统设置-> 填写 网站名称'); return WechatService::paymentPrepare(null, $orderInfo['order_id'], $orderInfo['pay_price'], 'product', StoreOrder::getSubstrUTf8($site_name . ' - ' . $bodyContent, 30), '', 'MWEB'); } /** * 用户确认收货 * @param $order * @param $uid * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @throws \think\db\exception\DbException * @throws \Exception */ public static function storeProductOrderUserTakeDelivery($order, $uid) { $res1 = StoreOrder::gainUserIntegral($order); // $res2 = User::backOrderBrokerage($order); $res2 = User::sendBackOrderBrokerage($order); StoreOrderCartInfo::where('oid', $order['id'])->where('paid', 1)->update(['take' => 1]); StoreOrder::orderTakeAfter($order); //满赠优惠券 WechatUser::userTakeOrderGiveCoupon($uid, $order['total_price']); if (!($res1 && $res2)) exception('收货失败!'); } /** * 修改状态 为已收货 admin模块 * @param $order * @throws \Exception */ public static function storeProductOrderTakeDeliveryAdmin($order) { $res1 = AdminStoreOrder::gainUserIntegral($order); // $res2 = User::backOrderBrokerage($order); $res2 = User::sendBackOrderBrokerage($order); StoreOrderCartInfo::where('oid', $order['id'])->where('paid', 1)->update(['take' => 1]); AdminStoreOrder::orderTakeAfter($order); if (!($res1 && $res2)) exception('收货失败!'); } /** * 修改状态 为已收货 定时任务使用 * @param $order * @throws \Exception */ public static function storeProductOrderTakeDeliveryTimer($order) { $res1 = AdminStoreOrder::gainUserIntegral($order, false); $res2 = User::sendBackOrderBrokerage($order); StoreOrderCartInfo::where('oid', $order['id'])->where('paid', 1)->update(['take' => 1]); AdminStoreOrder::orderTakeAfter($order); if (!($res1 && $res2)) exception('收货失败!'); } /** * 修改状态为 已退款 admin模块 * @param $data * @param $oid * @return bool|mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public static function storeProductOrderRefundY($data, $oid) { $order = AdminStoreOrder::where('id', $oid)->find(); if ($order['is_channel'] == 1) return AdminStoreOrder::refundRoutineTemplate($oid); //TODO 小程序余额退款模板消息 else return AdminStoreOrder::refundTemplate($data, $oid);//TODO 公众号余额退款模板消息 } /** * TODO 后台余额退款 * @param $product * @param $refund_data * @throws \Exception */ public static function storeOrderYueRefund($product, $refund_data) { $res = AdminStoreOrder::integralBack($product['id']); if (!$res) exception('退积分失败!'); } /** * 订单退积分 * @param $product $product 商品信息 * @param $back_integral $back_integral 退多少积分 */ public static function storeOrderIntegralBack($product, $back_integral) { } /** * 微信app支付 * @param $order * @param string $field * @return array|string * @throws Exception */ public static function appPay($order, string $field = 'order_id') { if (is_string($order)) $orderInfo = StoreOrder::where($field, $order)->find(); else $orderInfo = $order; if (!$orderInfo || !isset($orderInfo['paid'])) exception('支付订单不存在!'); if ($orderInfo['paid']) exception('支付已支付!'); if ($orderInfo['pay_price'] <= 0) exception('该支付无需支付!'); $bodyContent = StoreOrder::getProductTitle($orderInfo['cart_id']); $site_name = sys_config('site_name'); $wechat = SystemConfigService::more(['weixin_open_appid', 'weixin_open_appsecret']); $payment = SystemConfigService::more(['pay_weixin_mchid', 'pay_weixin_client_cert', 'pay_weixin_client_key', 'pay_weixin_key', 'pay_weixin_open']); if (!$bodyContent && !$site_name) exception('支付参数缺少:请前往后台设置->系统设置-> 填写 网站名称'); $config = array( 'appid' => $wechat['weixin_open_appid'], //填写高级调用功能的app id 'appsecret' => $wechat['weixin_open_appsecret'], //填写高级调用功能的app secret 'mchid' => $payment['pay_weixin_mchid'], //商户id 'key' => $payment['pay_weixin_key'], //填写你设定的key 'sslcert_path' => realpath('.' . $payment['pay_weixin_client_cert']), 'sslkey_path' => realpath('.' . $payment['pay_weixin_client_key']), 'transfer_rsa_public_path' => '', //企业转账到银行卡rsa公钥证书文件路径 ); $wechatpay = new \JiaLeo\Payment\Wechatpay\AppPay($config); $pay_data = [ 'body' => StoreOrder::getSubstrUTf8($site_name . ' - ' . $bodyContent, 30), //内容 'attach' => 'product', //商家数据包 'out_trade_no' => $orderInfo['order_id'], //商户订单号 'total_fee' => bcmul($orderInfo['pay_price'], 100, 0), //支付价格(单位:分) 'notify_url' => sys_config('site_url') . '/api/wechat/notify', //后台回调地址 ]; $url = $wechatpay->handle($pay_data); return $url; } public static function aliPay($orderId, $field = 'order_id') { if (is_string($orderId)) $orderInfo = StoreOrder::where($field, $orderId)->where('is_del', 0)->find(); else $orderInfo = $orderId; if (!$orderInfo || !isset($orderInfo['paid'])) exception('支付订单不存在!'); if ($orderInfo['paid']) exception('支付已支付!'); if ($orderInfo['pay_price'] <= 0) exception('该支付无需支付!'); $bodyContent = StoreOrder::getProductTitle($orderInfo['cart_id']); $site_name = sys_config('site_name'); if (!$site_name || !$bodyContent) exception('支付参数缺少:请前往后台设置->系统设置-> 填写 网站名称'); $alipay = SystemConfigService::more(['alipay_app_id', 'alipay_pub_key', 'alipay_private_key', 'alipay_key']); $notifyUrl = sys_config('site_url') . '/api/alipay/notify'; $aliPay = new AlipayService(); $aliPay->setAppid($alipay['alipay_app_id']); $aliPay->setNotifyUrl($notifyUrl); $aliPay->setRsaPrivateKey($alipay['alipay_private_key']); $aliPay->setTotalFee($orderInfo['pay_price']); $aliPay->setOutTradeNo($orderInfo['order_id']); $aliPay->setOrderName(StoreOrder::getSubstrUTf8($site_name . ' - ' . $bodyContent, 30)); $aliPay->setPassbackParams(['attach' => 'product']); $orderStr = $aliPay->getOrderStr(); return $orderStr; } }