/** * 统一下单接口 * * @param array $order 站内订单数组 * @param string $openId openid * @return string */ public static function unifiedOrder(array $order, $openId = '') { if (empty($order)) { return ''; } include_once WXPAY_SDK_ROOT . "unit/WxPay.JsApiPay.php"; //获取用户openid $tools = new JsApiPay(); if (empty($openId)) { $openId = $tools->GetOpenid(); } $wx_order_body = '女神送花(' . $order['player_id'] . '号)'; $order_detail = ($order['goods_type'] == 'flower' ? "送花(" : "送吻(") . $order['goods_amount'] . ")"; /* if (!empty($order['order_goods'])) { foreach ($order['order_goods'] As $g) { $order_detail .= $g['goods_name'].'('.$g['goods_price'].'x'.$g['goods_number'].")\n"; if (''==$wx_order_body) { $wx_order_body = mb_truncate($g['goods_name'], 27); } } $order_detail = rtrim($order_detail,"\n"); } */ //统一下单 if (1 || empty($order['pay_data1'])) { //订单状态可能会被后台更改,所以同一订单每次支付都要重新生成提交信息 if ('' == $wx_order_body) { $wx_order_body = '微信支付商品'; } $now = time(); $input = new WxPayUnifiedOrder(); $input->SetBody($wx_order_body); $input->SetDetail($order_detail); $input->SetAttach('simphp'); //商家自定义数据,原样返回 $input->SetOut_trade_no($order['order_sn']); $input->SetTotal_fee(intval($order['order_amount'] * 100)); //'分'为单位 $input->SetTime_start(date('YmdHis', $now)); $input->SetTime_expire(date('YmdHis', $now + 60 * 15)); //15分钟内支付有效 $input->SetGoods_tag(''); //商品标记,代金券或立减优惠功能的参数 $input->SetNotify_url(self::NOFIFY_URL); $input->SetTrade_type(self::TRADE_TYPE_JSAPI); $input->SetOpenid($openId); $order_wx = WxPayApi::unifiedOrder($input); //trace_debug('wxpay_order_wx', $order_wx); if ('SUCCESS' == $order_wx['return_code'] && 'SUCCESS' == $order_wx['result_code']) { //保存信息以防再次重复提交 $wxpay_data = ['appid' => $order_wx['appid'], 'mch_id' => $order_wx['mch_id'], 'trade_type' => $order_wx['trade_type'], 'prepay_id' => $order_wx['prepay_id']]; if (isset($order_wx['code_url'])) { $wxpay_data['code_url'] = $order_wx['code_url']; } Goods::orderUpdate(['pay_data1' => json_encode($wxpay_data)], $order['order_id']); } } else { $order_wx = json_decode($order['pay_data1'], true); } $jsApiParameters = $tools->GetJsApiParameters($order_wx); return $jsApiParameters; }