/** * 发起统一支付 * * @param $account 微信公众号对象 * @param $order 订单对象 * @param $access 支付配置对象 * @param $openid 微信Openid * @param string $trade_type 支付类型 * @return bool|\handler\common\Array * @throws \Exception */ public static function wxpay_order($account, $order, $access, $openid, $trade_type = 'JSAPI') { //创建支付记录 $ip = \Input::real_ip(); $timestamp = time(); //创建支付单号 $order_no = md5("{$order->order_no}{$timestamp}{$ip}"); $data = array('order_id' => $order->id, 'return_status' => 'NONE', 'out_trade_no' => $order_no, 'remark' => \Input::get('remark', ''), 'name' => \Input::get('name', ''), 'name_stype' => \Input::get('name_style', ''), 'real_money' => \Input::get('total_fee', $order->original_fee), 'openid' => $openid); $trade = \Model_OrderTrade::forge($data); if (!$trade->save()) { \Log::error('微信支付时发生异常,原因:交易记录创建失败'); die('trade save error!'); } //是否指定收款金额 $total_fee = $order->original_fee; if (\Input::get('total_fee', false)) { $total_fee = floatval(\Input::get('total_fee')); } $params = array('openid' => $openid, 'body' => $order->order_body ? $order->order_body : '', 'out_trade_no' => $order_no, 'total_fee' => $total_fee * 100, 'notify_url' => \Config::get('base_url') . 'services/gateway/notice_wxpay', 'trade_type' => $trade_type, 'appid' => $account->app_id, 'mch_id' => $access->access_id, 'nonce_str' => \Str::random('alnum', 16)); $params['sign'] = static::getWxPaySign($params, $access->access_key); $data = \handler\common\Tool::arrayToXml($params); $data = "<xml>{$data}</xml>"; $result = \handler\common\UrlTool::request_xml('https://api.mch.weixin.qq.com/pay/unifiedorder', 'POST', $data); $result = \handler\common\Tool::xmlToArray($result); if ($result['return_code'] == 'FAIL') { var_dump($result); die; } return $result; }