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']; }
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; }
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); }