REQUEST_URL = $title . '://' . $_SERVER['HTTP_HOST']; } /** * 微信扫码支付获取二维码 * @param array $order pay_order订单 * @param array $config 商户支付配置 * @param $store_name 门店名称 * @param $type 1自助收银机 2快捷收银 * @return array $res */ public function createWxPayOrder($order,$config,$store_name,$type) { $RPOModel = D('RetailPayOrder'); // pay_order表模型 $RPSModel = D('RetailPaySet'); // 商户支付设置模型 $out_trade_no = $order[$RPOModel::OUT_TRADE_NO]; if ($order[$RPOModel::M_PAY_TYPE] == 1) { // 普通模式. $post['appid'] = $config[$RPSModel::WX_APPID]; $post['mch_id'] = $config[$RPSModel::WX_MCH_ID]; $key = $config[$RPSModel::WX_SECRET_KEY]; $mer_id = $post['mch_id']; } else if ($order[$RPOModel::M_PAY_TYPE] == 2) { // 服务商 $pay_set = M("systemconfig")->find(); // 查询合作伙伴配置 $post['appid'] = $pay_set['wx_appid']; $post['mch_id'] = $pay_set['mch_id']; $post['sub_mch_id'] = $config[$RPSModel::WX_SUB_MCH_ID]; if(!empty($config[$RPSModel::WX_SUB_APPID])){ $post['sub_appid'] = $config[$RPSModel::WX_SUB_APPID]; } $key = $pay_set['wx_key']; $mer_id = $post['sub_mch_id']; } $RPOModel->updateOrder(array($RPOModel::OUT_TRADE_NO=>$order[$RPOModel::OUT_TRADE_NO]),array($RPOModel::MER_ID=>$mer_id)); $WxMicroPay = new \Util\Wx\WxMicroPay(array('key' => $key)); if($type == 1){ $post['body'] = $store_name . '-自助收银机购买商品'; }else{ $post['body'] = $store_name . '-快捷收单'; } $post['out_trade_no'] = $out_trade_no; $post['total_fee'] = $order[$RPOModel::TRADE_AMOUNT] * 100; $post['nonce_str'] = $WxMicroPay->createNoncestr(32); if($type == 1){ $post['notify_url'] = $this->REQUEST_URL . "/index.php/NotifyApi/SelfHelpCashier/wxPayNotifyUrl"; // 自助收银回调地址 }else{ $post['notify_url'] = $this->REQUEST_URL . "/index.php/NotifyApi/SelfHelpCashier/wxPayQuickNotifyUrl"; //快捷收单回调地址 } $post['trade_type'] = 'NATIVE'; //微信支付类型 $post['time_expire'] = date('YmdHis', time() + 60); $post['sign'] = $WxMicroPay->getSign($post); $xml = $WxMicroPay->arrayToXml($post); $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; $response = $WxMicroPay->postXmlCurl($xml, $url, 30); $response = json_decode(json_encode(simplexml_load_string($response, 'SimpleXMLElement', LIBXML_NOCDATA)), true); if (!empty($response) && $response['return_code'] != 'FAIL') { $res = array( 'status' => 1, 'msg' => '微信下单成功', 'data' => $response ); } else { $res = array( 'status' => 0, 'msg' => $response['return_msg'] ); } return $res; } /** * 支付宝扫码支付获取二维码 * @param array $order pay_order 订单 * @param array $config 商户支付配置 * @param $store_name 门店名称 * @param $type 1自助收银机 2快捷收银 * @return array $res * @throws \Exception */ public function createAliPayOrder($order,$config,$store_name,$type) { $RPOModel = D('RetailPayOrder'); // pay_order表模型 $RSModel = D('RetailStore'); // 门店表模型 $item['out_trade_no'] = $order[$RPOModel::OUT_TRADE_NO]; $item['total_amount'] = $order[$RPOModel::TRADE_AMOUNT]; if($type == 1){ $item['subject'] = $store_name . '-自助收银机购买商品'; }else{ $item['subject'] = $store_name . '-快捷收单'; } $item['timeout_express'] = '1m'; // 60秒超时关闭订单 if ($order[$RPOModel::M_PAY_TYPE] == 1) { // 普通模式 $appId = $config['alipay_appid']; $rsaPrivateKey = $config['alipay_private_key']; $alipayrsaPublicKey = $config['alipay_public_key']; $mer_id = $appId; } else if ($order[$RPOModel::M_PAY_TYPE] == 2) { // 服务商模式 $pay_set = M("systemconfig")->find(); // 查询合作伙伴配置 $appId = $pay_set['alipay_appid']; $rsaPrivateKey = $pay_set['alipay_private_key']; $alipayrsaPublicKey = $pay_set['alipay_public_key']; $mer_id = $config['alipay_sellerid']; } $RPOModel->updateOrder(array($RPOModel::OUT_TRADE_NO=>$order[$RPOModel::OUT_TRADE_NO]),array($RPOModel::MER_ID=>$mer_id)); vendor('AopSDK.AopClient'); $aop = new \AopClient(); $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do'; $aop->appId = $appId; $aop->rsaPrivateKey = $rsaPrivateKey; $aop->alipayrsaPublicKey = $alipayrsaPublicKey; $aop->apiVersion = '1.0'; $aop->signType = 'RSA2'; $aop->postCharset = 'utf-8'; $aop->format = 'json'; vendor('AopSDK.request.AlipayTradePrecreateRequest'); $request = new \AlipayTradePrecreateRequest(); if($type == 1){ $request->setNotifyUrl($this->REQUEST_URL . '/index.php/NotifyApi/SelfHelpCashier/aliPayNotifyUrl'); // 自助收银回调 }else{ $request->setNotifyUrl($this->REQUEST_URL . '/index.php/NotifyApi/SelfHelpCashier/aliPayQuickNotifyUrl'); //快捷收单回调 } $request->setBizContent(json_encode($item)); if ($order[$RPOModel::M_PAY_TYPE] == 1) { $result = $aop->execute($request); } else { $result = $aop->execute($request, "", $config["alipay_token"]); } $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; $resultCode = $result->$responseNode->code; if (!empty($resultCode) && $resultCode == 10000) { //交易成功 $result = json_decode(json_encode($result), true)['alipay_trade_precreate_response']; $result['status'] = 1; } else { //交易失败 $result['status'] = 0; $result['msg'] = json_decode(($result), true)['alipay_trade_precreate_response']['sub_msg']; $result['error_msg'] = json_encode($result); } return $result; } }