url($config['type'], $config['id']); $this->config = $config; } /** * 通知 */ public function notify() { $input = file_get_contents("php://input"); if ($input) { parse_str($input, $input); } else { $input = Dever::input(); } $this->log('支付回调-初始化', $input); $tools = new \Cmbc\Handle(); $callback = $tools->get('notify', $this->config); $result = $callback->request($input, $this); if ($result) { $this->log('支付回调-获取数据', $result); $this->updateOrder($result['mhtOrderNo'], $result['mhtOrderAmt']); echo 'success=Y';die; } else { echo 'success=N';die; } } /** * 获取统一下单的基本信息 */ public function order($account_id, $project_id, $uid, $username, $product_id, $name, $cash, $openid = false, $type = 1, $order_id = false) { $trade_type = $this->getType($type); $order_id = $this->createOrder($uid, $username, $account_id, $project_id, $product_id, $name, $cash, $this->config->GetType(), $order_id); $request['merOrderId'] = $order_id; $request['mid'] = $this->config['mchid']; $request['tid'] = $this->config['mchid']; $request['instMid'] = 'MINIDEFAULT'; $request['totalAmount'] = $cash * 100; $request['subAppId'] = $this->config['appid']; $request['requestTimestamp'] = date("Y-m-d H:i:s"); $request['expireTime'] = $this->config['timeout']; $request['notifyUrl'] = $this->config['notify']; $request['tradeType'] = 'MINI'; /* # 是否启用分账 $request['divisionFlag'] = true; # 平台分账金额 $request['platformAmount'] = $request['totalAmount'] * 0.1; if ($request['divisionFlag']) { $request['subOrders'] = array(); $request['subOrders']['mid'] = 1; $request['subOrders']['totalAmount'] = $request['totalAmount'] - $request['platformAmount']; }*/ if (!$openid) { # 测试的openid $request['subOpenId'] = 'ofBUV0RUoy_8C4VctZjrSDGzhUfY'; } else { $request['subOpenId'] = $openid; } $result = $this->request('unified-order', $request); $this->updateOrderParam($order_id, $result); return $result; } # 退款 public function refundByOrder($order_id) { $info = Dever::db('pay/order')->one(array('order_id' => $order_id)); if ($info && ($info['status'] == 1 || $info['status'] == 2 || $info['status'] == 5)) { $this->refund($info['order_id'], $info['cash']); Dever::db('pay/order')->update(array('where_id' => $info['id'], 'status' => 5)); return $result; } return false; } # 退款 public function refund($order_id, $cash) { $out_trade_no = $order_id; $cash = $cash * 100; $total_fee = $cash; $refund_fee = $cash; $input = new \WxPayRefund(); $input->SetOut_trade_no($out_trade_no); $input->SetTotal_fee($total_fee); $input->SetRefund_fee($refund_fee); $input->SetOut_refund_no($out_trade_no . '_' . time()); $input->SetOp_user_id($this->config->GetMerchantId()); $result = \WxPayApi::refund($this->config, $input); return $result; } /** * 获取二维码支付 */ public function qrcode($order, $refer) { $notify = new \NativePay(); $result = $notify->GetPayUrl($order); $url = $result['code_url']; return $url; } /** * 获取小程序支付 */ public function applet($order) { $result = array(); if (isset($order['prepay_id'])) { $result['time'] = $order['timeStamp']; $result['nonce_str'] = $order['nonceStr']; $result['prepay_id'] = $order['prepay_id']; $result['sign_type'] = $order['signType']; $result['sign'] = $order['paySign']; } return $result; } /** * 获取页面支付 */ public function page($order, $refer) { $refer = urldecode($refer); $tools = new \JsApiPay($this->config); $info = $tools->GetJsApiParameters($order); $html = ''; return $html; } private function getType($type) { switch ($type) { case 1: $type = 'JSAPI'; break; case 2: $type = 'NATIVE'; break; case 3: $type = 'APP'; break; case 4: $type = 'MWEB'; break; } return $type; } }