Example #1
0
 public function weiXinUnifiedOrderByApp($orderId = 0, $orderLongId = 0)
 {
     $orderInfo = null;
     if ($orderId > 0) {
         $orderInfo = UserOrder::findFirst('order_id = ' . $orderId);
     } elseif ($orderLongId > 0) {
         $orderInfo = UserOrder::findFirst('order_long_id = ' . $orderLongId);
     }
     if (!$orderInfo) {
         return false;
     }
     $orderId = $orderInfo->order_id;
     $orderLongId = $orderInfo->order_long_id;
     $totalFee = $orderInfo->order_money;
     $titleArr = [];
     // 商品信息
     $goods = UserOrderGoods::query()->columns('service_name name')->where('order_id = :oid:', ['oid' => $orderId])->leftJoin('Apps\\Common\\Models\\BeautyParlorService', 'service_id = goods_id', 'bps')->execute();
     foreach ($goods as $d) {
         $titleArr[] = $d->name;
     }
     $title = implode(',', $titleArr);
     $payConfig = (include APP_COMMON_PATH . "base-config/pay.php");
     $wxPay = new WeiXinPay($payConfig['weixin']);
     $info = $wxPay->unifiedOrder($orderLongId, $title, $totalFee, 'APP');
     if ($info == false) {
         return false;
     }
     return $info['prepayId'];
 }
Example #2
0
 public function weiXin2AppPay($orderId = 0, $orderLongId = 0)
 {
     $perpayid = $this->weiXinUnifiedOrderByApp($orderId, $orderLongId);
     if ($perpayid == false) {
         return false;
     }
     $payConfig = (include APP_COMMON_PATH . "base-config/pay.php");
     $weixinConfig = $payConfig['weixin'];
     $params = ['appid' => $weixinConfig['appId'], 'partnerid' => $weixinConfig['mchId'], 'prepayid' => $perpayid, 'package' => 'Sign=WXPay', 'noncestr' => Util::RandStr(10), 'timestamp' => time()];
     $pay = new \WeiXin\Pay($weixinConfig);
     $params['sign'] = $pay->getSign($params);
     $params['_package'] = $params['package'];
     unset($params['package']);
     return $params;
 }
Example #3
0
 public function notifyAction()
 {
     $req = $this->request;
     $body = $req->getRawBody();
     $pay = new Pay($this->weixinConfig);
     $checkResult = $pay->notifyVerify($body);
     $echoResult = function ($success, $msg = 'OK') {
         $result = $success ? 'SUCCESS' : 'FAIL';
         echo "<xml><return_code><![CDATA[{$result}]]></return_code><return_msg><![CDATA[{$msg}]]></return_msg></xml>";
     };
     if (is_int($checkResult)) {
         // 错误处理,
         // 100-xml解析异常,101-签名验证失败,102-返回状态码错误,103-业务结果异常
         switch ($checkResult) {
             case PayState::ASYNC_FAIL_XML:
                 $echoResult(false, 'xml error');
                 break;
             case PayState::ASYNC_FAIL_SIGN:
                 $echoResult(false, 'sign verify error');
                 break;
             case PayState::ASYNC_FAIL_RETURN_CODE:
                 $echoResult(true);
                 break;
             case PayState::ASYNC_FAIL_RESULT_CODE:
                 $echoResult(true);
                 break;
         }
         $this->savePayLog(0, 0, PayType::WEIXIN, $checkResult, $body);
         return;
     }
     $appId = $checkResult['appid'];
     $mchId = $checkResult['mch_id'];
     $resultCode = $checkResult['result_code'];
     $openId = $checkResult['openid'];
     $totalFee = $checkResult['total_fee'];
     //总金额,单位为分
     $cashFee = $checkResult['cash_fee'];
     //现金支付金额
     $transactionId = $checkResult['transaction_id'];
     //微信支付订单号
     $outTradeNoStr = $checkResult['out_trade_no'];
     //商户订单号
     // 拆分订单号
     $outTradeNoArr = explode('-', $outTradeNoStr);
     $outTradeNo = $outTradeNoArr[0];
     $this->payHandle($echoResult, PayType::WEIXIN, $transactionId, $outTradeNo, $totalFee, $body);
 }