diff --git a/framework b/framework
index 75bbc3b..e9d066d 160000
--- a/framework
+++ b/framework
@@ -1 +1 @@
-Subproject commit 75bbc3b075de19f239532f60c5995d06c5f814e2
+Subproject commit e9d066dd88a8e7e37103021c427a205a5cfcdcec
diff --git a/library/Api/Yohobuy.php b/library/Api/Yohobuy.php
index 6d6af5c..9bd8cac 100644
--- a/library/Api/Yohobuy.php
+++ b/library/Api/Yohobuy.php
@@ -1,478 +1,478 @@
-<?php
-
-/**
- * 有货相关接口类
- *
- * @name Yohobuy
- * @package library/Api
- * @copyright yoho.inc
- * @version 1.0 (2015-9-30 16:42:51)
- * @author fei.hong <fei.hong@yoho.cn>
- */
-
-namespace Api;
-
-use Plugin\Cache;
-
-class Yohobuy
-{
-    /* 正式环境 */
-
-//     const API_URL = 'http://api2.open.yohobuy.com/';
-//     const API_URL2 = 'http://api.open.yohobuy.com/';
-//     const SERVICE_URL = 'http://service.api.yohobuy.com/';
-//     const YOHOBUY_URL = 'http://www.yohobuy.com/';
-
-//    const API_URL = 'http://apih5.yoho.cn/';
-//    const API_URL2 = 'http://apih5.yoho.cn/';
-   // const SERVICE_URL = 'http://serviceh5.yoho.cn/';
-   // const YOHOBUY_URL = 'http://www.yohobuy.com/';
-   // const API_OLD = 'http://api2.open.yohobuy.com/';
-
-//    /* 测试环境 */
-    //       const API_URL = 'http://192.168.102.205:8080/gateway/'; // 先临时使用网关
-      const API_URL = 'http://testapi.yoho.cn:28078/';
-      const SERVICE_URL = 'http://testservice.yoho.cn:28077/';
-      const YOHOBUY_URL = 'http://www.yohobuy.com/';
-      const API_OLD = 'http://test2.open.yohobuy.com/';
-
-    /* 预览环境 */
-//     const API_URL = 'http://preapi.yoho.cn/';
-//     const API_URL2 = 'http://preapi.yoho.cn/';
-//     const SERVICE_URL = 'http://serviceh5.yoho.cn/';
-//     const YOHOBUY_URL = 'http://www.yohobuy.com/';
-//     const API_OLD = 'http://api2.open.yohobuy.com/';
-
-    /* PC重构地址 */
-//     const API_URL = 'http://test.open.yohobuy.com/';
-//     const SERVICE_URL = 'http://test.service.api.yohobuy.com/';
-//     const YOHOBUY_URL = 'http://www.yohobuy.com/';
-//     const API_OLD = 'http://api2.open.yohobuy.com/';
-
-    /**
-     * 私钥列表
-     *
-     * @var array
-     */
-    public static $privateKeyList = array(
-        'android' => 'fd4ad5fcfa0de589ef238c0e7331b585',
-        'iphone' => 'a85bb0674e08986c6b115d5e3a4884fa',
-        'ipad' => 'ad9fcda2e679cf9229e37feae2cdcf80',
-         'web' => '0ed29744ed318fd28d2c07985d3ba633',
-    );
-
-    /**
-     * 取得当前的客户端类型
-     */
-    public static function clientType()
-    {
-        // 苹果设备
-        if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone')) {
-            return 'iphone';
-        }
-        // 苹果IPAD
-        elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'iPad')) {
-
-            return 'ipad';
-        }
-        elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'android')) {
-            return 'android';
-        }
-        // 其它
-        else {
-            return 'android';
-        }
-    }
-
-    /**
-     * 取得当前的IP地址
-     *
-     * @param bool $int 返回int类型的ip地址,默认是
-     * @return mixed 当前的IP地址
-     */
-    public static function ip($int = true)
-    {
-        if (isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP']) {
-            $onlineip = $_SERVER['HTTP_CLIENT_IP'];
-        } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR']) {
-            $onlineip = $_SERVER['HTTP_X_FORWARDED_FOR'];
-        } else {
-            $onlineip = $_SERVER['REMOTE_ADDR'];
-        }
-
-        return $int ? ip2long($onlineip) : $onlineip;
-    }
-
-    /**
-     * 取得公共的参数
-     *
-     * @return array
-     */
-    public static function param()
-    {
-        $clientType = self::clientType();
-        $param = array(
-            'app_version' => '3.8.2',
-            'client_type' => $clientType,
-            'os_version' => 'yohobuy:h5',
-            'private_key' => self::$privateKeyList[$clientType],
-            'screen_size' => '720x1280',
-            'v' => '7',
-        );
-        return $param;
-    }
-
-    /**
-     * 构建URL
-     *
-     * @param string $url
-     * @param array $data
-     * @return string
-     */
-    public static function httpBuildQuery($url, $data)
-    {
-        // 销毁私钥参数
-        if (isset($data['private_key'])) {
-            unset($data['private_key']);
-        }
-        if (strstr($url, '?') !== false) {
-            $url .= '&' . http_build_query($data, null, '&');
-        } else {
-            $url .= '?' . http_build_query($data, null, '&');
-        }
-        return $url;
-    }
-
-    /**
-     * get方式调用接口
-     *
-     * @param string $url 接口URL
-     * @param array $data 参数列表
-     * @parma mixed $cache 控制是否启用接口数据的缓存(时间单位为秒). 如3600表示缓存1小时, false表示不缓存
-     * @param bool $returnJson 控制是否返回json格式数据
-     * @param int $timeout 超时时间
-     * @return mixed
-     */
-    public static function get($url, $data = array(), $cache = false, $returnJson = false, $timeout = 5)
-    {
-        // 销毁私钥参数
-        if (isset($data['private_key'])) {
-            unset($data['private_key']);
-        }
-        if (!empty($data)) {
-            $url = self::httpBuildQuery($url, $data);
-        }
-        /* 开启缓存的情况 */
-        if ($cache && USE_CACHE) {
-            // 先尝试获取一级缓存(master), 有数据则直接返回.
-            $result = Cache::get($url, 'master');
-            if (!empty($result)) {
-                return $result;
-            }
-        }
-
-        $ch = curl_init($url);
-        curl_setopt($ch, CURLOPT_HEADER, 0);
-        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-        $result = curl_exec($ch);
-        if (!$returnJson && !empty($result)) {
-            $result = json_decode($result, true);
-        }
-
-        curl_close($ch);
-        $data = array();
-
-        /* 开启缓存的情况 */
-        if ($cache && USE_CACHE) {
-            // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据.
-            if (empty($result)) {
-                $result = Cache::get($url, 'slave');
-            }
-            // 接口调用成功时,这里会设置一级(master)和二级(slave)的缓存数据.
-            else {
-                Cache::set($url, $result, $cache);
-            }
-        }
-
-        return $result;
-    }
-
-    /**
-     * post提交数据
-     *
-     * @param string $url 接口URL
-     * @param array $data 参数列表
-     * @param bool $returnJson 控制是否返回json格式数据
-     * @param int $timeout 超时时间
-     * @param array $header
-     * @param array $cookie
-     * @return mixed
-     */
-    public static function post($url, $data = array(), $returnJson = false, $timeout = 10, $header = array(), $cookie = array())
-    {
-        $ch = curl_init($url);
-
-        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
-        if (!empty($header)) {
-            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
-        } else {
-            curl_setopt($ch, CURLOPT_HEADER, 0);
-        }
-
-        if (!empty($cookie)) {
-            $cookie_str = array();
-            foreach ($cookie as $key => $val) {
-                $cookie_str[] = urlencode($key) . '=' . urlencode($val);
-            }
-            curl_setopt($ch, CURLOPT_COOKIE, implode(';', $cookie_str));
-        }
-        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 YOHOWEB');
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-        curl_setopt($ch, CURLOPT_POST, true);
-        // 销毁私钥参数
-        if (isset($data['private_key'])) {
-            unset($data['private_key']);
-        }
-        if (!empty($data)) {
-            $str = http_build_query($data, null, '&');
-            // 新加支持application/x-www-form-urlencoded调用方式
-            //curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
-            curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
-        }
-        $result = curl_exec($ch);
-        if (!$returnJson && !empty($result)) {
-            $result = json_decode($result, true);
-        }
-        curl_close($ch);
-        $data = array();
-
-        return $result;
-    }
-
-    /**
-     * 批量调用接口
-     *
-     * @param array $urlList 接口列表
-     * @param array $options CURL设置项
-     * @parma mixed $cache 控制是否启用接口数据的缓存(时间单位为秒). 如3600表示缓存1小时, false表示不缓存
-     * @param int $timeout 超时时间,单位是秒
-     * @return array
-     */
-    public static function getMulti($urlList = array(), $options = array(), $cache = false, $timeout = 5)
-    {
-        /* 开启缓存的情况 */
-        if ($cache && USE_CACHE) {
-            $key = md5(implode(',', array_values($urlList)));
-            // 先尝试获取一级缓存(master), 有数据则直接返回.
-            $result = Cache::get($key, 'master');
-            if (!empty($result)) {
-                return $result;
-            }
-        }
-
-        $result = array();
-        $response = array();
-        $running = 0;
-        $data = '';
-        $error = '';
-        $defaultOptions = array(
-            CURLOPT_HEADER => 0,
-            CURLOPT_RETURNTRANSFER => 1,
-            CURLOPT_CONNECTTIMEOUT => $timeout,
-            CURLOPT_TIMEOUT => $timeout,
-            CURLOPT_NOSIGNAL => 1, //忽略所有的curl传递给php的信号,减少并发crash
-        );
-        $mh = curl_multi_init();
-        $ch = array();
-
-        // 应用CURL配置
-        if (empty($options)) {
-            $options = $defaultOptions;
-        } else {
-            $options = array_merge($defaultOptions, $options);
-        }
-
-        // 添加子链接句柄
-        foreach ($urlList as $name => $api) {
-            $ch[$name] = curl_init($api);
-            curl_setopt_array($ch[$name], $options);
-            curl_multi_add_handle($mh, $ch[$name]);
-            $result[$name] = array();
-        }
-
-        // 调用API接口
-        do {
-            do {
-                $status = curl_multi_exec($mh, $running);
-            } while ($status == CURLM_CALL_MULTI_PERFORM);
-
-            if ($status != CURLM_OK) {
-                break;
-            }
-
-            if ($running > 0) {
-                curl_multi_select($mh, 0.5);
-            }
-        } while ($running);
-
-        // 获取API接口响应的结果
-        foreach ($urlList as $name => $api) {
-            $error = curl_error($ch[$name]);
-            if ($error != '') {
-                continue;
-            }
-
-            $data = curl_multi_getcontent($ch[$name]);
-            if (!$data) {
-                continue;
-            }
-
-            $response = json_decode($data, true);
-            if (empty($response['data'])) {
-                continue;
-            }
-            $result[$name] = $response['data'];
-
-            curl_multi_remove_handle($mh, $ch[$name]);
-            curl_close($ch[$name]);
-        }
-        curl_multi_close($mh);
-
-        /* 开启缓存的情况 */
-        if ($cache && USE_CACHE) {
-            // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据.
-            if (empty($result[$name])) {
-                $result = Cache::get($key, 'slave');
-            }
-            // 接口调用成功时,这里会设置一级(master)和二级(slave)的缓存数据.
-            else {
-                Cache::set($key, $result, $cache);
-            }
-        }
-
-        return $result;
-    }
-
-    /**
-     * rpc调用远程服务(YAR)
-     *
-     * @see http://php.net/manual/zh/yar-client.setopt.php
-     * @param string $uri
-     * @param string $method
-     * @param array $parameters
-     * @param mixed $cache 控制是否启用接口数据的缓存(时间单位为秒). 如3600表示缓存1小时, false表示不缓存
-     * @param int $timeout
-     * @return array
-     */
-    public static function yarClient($uri, $method, $parameters = array(), $cache = false, $timeout = 3000)
-    {
-        /* 开启缓存的情况 */
-        if ($cache && USE_CACHE) {
-            $key = self::httpBuildQuery($uri . $method, $parameters);
-            // 先尝试获取一级缓存(master), 有数据则直接返回.
-            $result = Cache::get($key, 'master');
-            if (!empty($result)) {
-                return $result;
-            }
-        }
-
-        $client = new \Yar_Client($uri);
-        $client->SetOpt(YAR_OPT_PACKAGER, 'php');
-        $client->SetOpt(YAR_OPT_TIMEOUT, $timeout);
-        $client->SetOpt(YAR_OPT_CONNECT_TIMEOUT, $timeout);
-
-        try {
-            $result = call_user_func_array(array($client, $method), $parameters);
-        } catch (\Exception $e) {
-            $result = array();
-        }
-
-        /* 开启缓存的情况 */
-        if ($cache && USE_CACHE) {
-            // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据.
-            if (empty($result)) {
-                $result = Cache::get($key, 'slave');
-            }
-            // 接口调用成功时,这里会设置一级(master)和二级(slave)的缓存数据.
-            else {
-                Cache::set($key, $result, $cache);
-            }
-        }
-
-        return $result;
-    }
-
-    /**
-     * 并行(异步)调用远程服务
-     *
-     * @see http://php.net/manual/zh/class.yar-concurrent-client.php
-     * @param string $uri
-     * @param string $method
-     * @param array $parameter
-     * @param callable $callback
-     * @param int $timeout
-     * @return void
-     */
-    public static function yarConcurrentCall($uri, $method, $parameters, $callback, $timeout = 3000)
-    {
-        \Yar_Concurrent_Client::call($uri, $method, $parameters, $callback, null, array(
-            YAR_OPT_PACKAGER => 'php',
-            YAR_OPT_TIMEOUT => $timeout,
-            YAR_OPT_CONNECT_TIMEOUT => $timeout
-        ));
-    }
-
-    public static function yarConcurrentLoop($callback = null)
-    {
-        \Yar_Concurrent_Client::loop($callback);
-    }
-
-    /**
-     * 提交json格式数据请求java有关接口
-     *
-     * @param string $url 接口URL
-     * @param array $data 参数列表
-     * @param bool $returnJson 控制是否返回json格式数据
-     * @param int $timeout 超时时间
-     * @param array $cookie
-     * @return mixed
-     */
-    public static function jsonPost($url, $data = array(), $returnJson = false, $timeout = 10, $cookie = array())
-    {
-        $ch = curl_init($url);
-
-        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
-        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
-
-        if (!empty($cookie)) {
-            $cookie_str = array();
-            foreach ($cookie as $key => $val) {
-                $cookie_str[] = urlencode($key) . '=' . urlencode($val);
-            }
-            curl_setopt($ch, CURLOPT_COOKIE, implode(';', $cookie_str));
-        }
-
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-
-        if (!empty($data)) {
-            $data_string = json_encode($data);
-
-            curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
-            // 设置json的Header
-            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
-                'Content-Type: application/json',
-                'Content-Length: ' . strlen($data_string)
-            ));
-        }
-        $result = curl_exec($ch);
-        if (!$returnJson && !empty($result)) {
-            $result = json_decode($result, true);
-        }
-        curl_close($ch);
-        $data = array();
-
-        return $result;
-    }
-
-}
+<?php
+
+/**
+ * 有货相关接口类
+ *
+ * @name Yohobuy
+ * @package library/Api
+ * @copyright yoho.inc
+ * @version 1.0 (2015-9-30 16:42:51)
+ * @author fei.hong <fei.hong@yoho.cn>
+ */
+
+namespace Api;
+
+use Plugin\Cache;
+
+class Yohobuy
+{
+    /* 正式环境 */
+
+//     const API_URL = 'http://api2.open.yohobuy.com/';
+//     const API_URL2 = 'http://api.open.yohobuy.com/';
+//     const SERVICE_URL = 'http://service.api.yohobuy.com/';
+//     const YOHOBUY_URL = 'http://www.yohobuy.com/';
+
+//    const API_URL = 'http://apih5.yoho.cn/';
+//    const API_URL2 = 'http://apih5.yoho.cn/';
+   // const SERVICE_URL = 'http://serviceh5.yoho.cn/';
+   // const YOHOBUY_URL = 'http://www.yohobuy.com/';
+   // const API_OLD = 'http://api2.open.yohobuy.com/';
+
+//    /* 测试环境 */
+    //       const API_URL = 'http://192.168.102.205:8080/gateway/'; // 先临时使用网关
+      const API_URL = 'http://testapi.yoho.cn:28078/';
+      const SERVICE_URL = 'http://testservice.yoho.cn:28077/';
+      const YOHOBUY_URL = 'http://www.yohobuy.com/';
+      const API_OLD = 'http://test2.open.yohobuy.com/';
+
+    /* 预览环境 */
+//     const API_URL = 'http://preapi.yoho.cn/';
+//     const API_URL2 = 'http://preapi.yoho.cn/';
+//     const SERVICE_URL = 'http://serviceh5.yoho.cn/';
+//     const YOHOBUY_URL = 'http://www.yohobuy.com/';
+//     const API_OLD = 'http://api2.open.yohobuy.com/';
+
+    /* PC重构地址 */
+//     const API_URL = 'http://test.open.yohobuy.com/';
+//     const SERVICE_URL = 'http://test.service.api.yohobuy.com/';
+//     const YOHOBUY_URL = 'http://www.yohobuy.com/';
+//     const API_OLD = 'http://api2.open.yohobuy.com/';
+
+    /**
+     * 私钥列表
+     *
+     * @var array
+     */
+    public static $privateKeyList = array(
+        'android' => 'fd4ad5fcfa0de589ef238c0e7331b585',
+        'iphone' => 'a85bb0674e08986c6b115d5e3a4884fa',
+        'ipad' => 'ad9fcda2e679cf9229e37feae2cdcf80',
+         'web' => '0ed29744ed318fd28d2c07985d3ba633',
+    );
+
+    /**
+     * 取得当前的客户端类型
+     */
+    public static function clientType()
+    {
+        // 苹果设备
+        if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone')) {
+            return 'iphone';
+        }
+        // 苹果IPAD
+        elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'iPad')) {
+
+            return 'ipad';
+        }
+        elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'android')) {
+            return 'android';
+        }
+        // 其它
+        else {
+            return 'android';
+        }
+    }
+
+    /**
+     * 取得当前的IP地址
+     *
+     * @param bool $int 返回int类型的ip地址,默认是
+     * @return mixed 当前的IP地址
+     */
+    public static function ip($int = true)
+    {
+        if (isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP']) {
+            $onlineip = $_SERVER['HTTP_CLIENT_IP'];
+        } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR']) {
+            $onlineip = $_SERVER['HTTP_X_FORWARDED_FOR'];
+        } else {
+            $onlineip = $_SERVER['REMOTE_ADDR'];
+        }
+
+        return $int ? ip2long($onlineip) : $onlineip;
+    }
+
+    /**
+     * 取得公共的参数
+     *
+     * @return array
+     */
+    public static function param()
+    {
+        $clientType = self::clientType();
+        $param = array(
+            'app_version' => '3.8.2',
+            'client_type' => $clientType,
+            'os_version' => 'yohobuy:h5',
+            'private_key' => self::$privateKeyList[$clientType],
+            'screen_size' => '720x1280',
+            'v' => '7',
+        );
+        return $param;
+    }
+
+    /**
+     * 构建URL
+     *
+     * @param string $url
+     * @param array $data
+     * @return string
+     */
+    public static function httpBuildQuery($url, $data)
+    {
+        // 销毁私钥参数
+        if (isset($data['private_key'])) {
+            unset($data['private_key']);
+        }
+        if (strstr($url, '?') !== false) {
+            $url .= '&' . http_build_query($data, null, '&');
+        } else {
+            $url .= '?' . http_build_query($data, null, '&');
+        }
+        return $url;
+    }
+
+    /**
+     * get方式调用接口
+     *
+     * @param string $url 接口URL
+     * @param array $data 参数列表
+     * @parma mixed $cache 控制是否启用接口数据的缓存(时间单位为秒). 如3600表示缓存1小时, false表示不缓存
+     * @param bool $returnJson 控制是否返回json格式数据
+     * @param int $timeout 超时时间
+     * @return mixed
+     */
+    public static function get($url, $data = array(), $cache = false, $returnJson = false, $timeout = 5)
+    {
+        // 销毁私钥参数
+        if (isset($data['private_key'])) {
+            unset($data['private_key']);
+        }
+        if (!empty($data)) {
+            $url = self::httpBuildQuery($url, $data);
+        }
+        /* 开启缓存的情况 */
+        if ($cache && USE_CACHE) {
+            // 先尝试获取一级缓存(master), 有数据则直接返回.
+            $result = Cache::get($url, 'master');
+            if (!empty($result)) {
+                return $result;
+            }
+        }
+
+        $ch = curl_init($url);
+        curl_setopt($ch, CURLOPT_HEADER, 0);
+        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        $result = curl_exec($ch);
+        if (!$returnJson && !empty($result)) {
+            $result = json_decode($result, true);
+        }
+
+        curl_close($ch);
+        $data = array();
+
+        /* 开启缓存的情况 */
+        if ($cache && USE_CACHE) {
+            // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据.
+            if (empty($result)) {
+                $result = Cache::get($url, 'slave');
+            }
+            // 接口调用成功时,这里会设置一级(master)和二级(slave)的缓存数据.
+            else {
+                Cache::set($url, $result, $cache);
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * post提交数据
+     *
+     * @param string $url 接口URL
+     * @param array $data 参数列表
+     * @param bool $returnJson 控制是否返回json格式数据
+     * @param int $timeout 超时时间
+     * @param array $header
+     * @param array $cookie
+     * @return mixed
+     */
+    public static function post($url, $data = array(), $returnJson = false, $timeout = 10, $header = array(), $cookie = array())
+    {
+        $ch = curl_init($url);
+
+        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
+        if (!empty($header)) {
+            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
+        } else {
+            curl_setopt($ch, CURLOPT_HEADER, 0);
+        }
+
+        if (!empty($cookie)) {
+            $cookie_str = array();
+            foreach ($cookie as $key => $val) {
+                $cookie_str[] = urlencode($key) . '=' . urlencode($val);
+            }
+            curl_setopt($ch, CURLOPT_COOKIE, implode(';', $cookie_str));
+        }
+        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 YOHOWEB');
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_POST, true);
+        // 销毁私钥参数
+        if (isset($data['private_key'])) {
+            unset($data['private_key']);
+        }
+        if (!empty($data)) {
+            $str = http_build_query($data, null, '&');
+            // 新加支持application/x-www-form-urlencoded调用方式
+            //curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+            curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
+        }
+        $result = curl_exec($ch);
+        if (!$returnJson && !empty($result)) {
+            $result = json_decode($result, true);
+        }
+        curl_close($ch);
+        $data = array();
+
+        return $result;
+    }
+
+    /**
+     * 批量调用接口
+     *
+     * @param array $urlList 接口列表
+     * @param array $options CURL设置项
+     * @parma mixed $cache 控制是否启用接口数据的缓存(时间单位为秒). 如3600表示缓存1小时, false表示不缓存
+     * @param int $timeout 超时时间,单位是秒
+     * @return array
+     */
+    public static function getMulti($urlList = array(), $options = array(), $cache = false, $timeout = 5)
+    {
+        /* 开启缓存的情况 */
+        if ($cache && USE_CACHE) {
+            $key = md5(implode(',', array_values($urlList)));
+            // 先尝试获取一级缓存(master), 有数据则直接返回.
+            $result = Cache::get($key, 'master');
+            if (!empty($result)) {
+                return $result;
+            }
+        }
+
+        $result = array();
+        $response = array();
+        $running = 0;
+        $data = '';
+        $error = '';
+        $defaultOptions = array(
+            CURLOPT_HEADER => 0,
+            CURLOPT_RETURNTRANSFER => 1,
+            CURLOPT_CONNECTTIMEOUT => $timeout,
+            CURLOPT_TIMEOUT => $timeout,
+            CURLOPT_NOSIGNAL => 1, //忽略所有的curl传递给php的信号,减少并发crash
+        );
+        $mh = curl_multi_init();
+        $ch = array();
+
+        // 应用CURL配置
+        if (empty($options)) {
+            $options = $defaultOptions;
+        } else {
+            $options = array_merge($defaultOptions, $options);
+        }
+
+        // 添加子链接句柄
+        foreach ($urlList as $name => $api) {
+            $ch[$name] = curl_init($api);
+            curl_setopt_array($ch[$name], $options);
+            curl_multi_add_handle($mh, $ch[$name]);
+            $result[$name] = array();
+        }
+
+        // 调用API接口
+        do {
+            do {
+                $status = curl_multi_exec($mh, $running);
+            } while ($status == CURLM_CALL_MULTI_PERFORM);
+
+            if ($status != CURLM_OK) {
+                break;
+            }
+
+            if ($running > 0) {
+                curl_multi_select($mh, 0.5);
+            }
+        } while ($running);
+
+        // 获取API接口响应的结果
+        foreach ($urlList as $name => $api) {
+            $error = curl_error($ch[$name]);
+            if ($error != '') {
+                continue;
+            }
+
+            $data = curl_multi_getcontent($ch[$name]);
+            if (!$data) {
+                continue;
+            }
+
+            $response = json_decode($data, true);
+            if (empty($response['data'])) {
+                continue;
+            }
+            $result[$name] = $response['data'];
+
+            curl_multi_remove_handle($mh, $ch[$name]);
+            curl_close($ch[$name]);
+        }
+        curl_multi_close($mh);
+
+        /* 开启缓存的情况 */
+        if ($cache && USE_CACHE) {
+            // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据.
+            if (empty($result[$name])) {
+                $result = Cache::get($key, 'slave');
+            }
+            // 接口调用成功时,这里会设置一级(master)和二级(slave)的缓存数据.
+            else {
+                Cache::set($key, $result, $cache);
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * rpc调用远程服务(YAR)
+     *
+     * @see http://php.net/manual/zh/yar-client.setopt.php
+     * @param string $uri
+     * @param string $method
+     * @param array $parameters
+     * @param mixed $cache 控制是否启用接口数据的缓存(时间单位为秒). 如3600表示缓存1小时, false表示不缓存
+     * @param int $timeout
+     * @return array
+     */
+    public static function yarClient($uri, $method, $parameters = array(), $cache = false, $timeout = 3000)
+    {
+        /* 开启缓存的情况 */
+        if ($cache && USE_CACHE) {
+            $key = self::httpBuildQuery($uri . $method, $parameters);
+            // 先尝试获取一级缓存(master), 有数据则直接返回.
+            $result = Cache::get($key, 'master');
+            if (!empty($result)) {
+                return $result;
+            }
+        }
+
+        $client = new \Yar_Client($uri);
+        $client->SetOpt(YAR_OPT_PACKAGER, 'php');
+        $client->SetOpt(YAR_OPT_TIMEOUT, $timeout);
+        $client->SetOpt(YAR_OPT_CONNECT_TIMEOUT, $timeout);
+
+        try {
+            $result = call_user_func_array(array($client, $method), $parameters);
+        } catch (\Exception $e) {
+            $result = array();
+        }
+
+        /* 开启缓存的情况 */
+        if ($cache && USE_CACHE) {
+            // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据.
+            if (empty($result)) {
+                $result = Cache::get($key, 'slave');
+            }
+            // 接口调用成功时,这里会设置一级(master)和二级(slave)的缓存数据.
+            else {
+                Cache::set($key, $result, $cache);
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * 并行(异步)调用远程服务
+     *
+     * @see http://php.net/manual/zh/class.yar-concurrent-client.php
+     * @param string $uri
+     * @param string $method
+     * @param array $parameter
+     * @param callable $callback
+     * @param int $timeout
+     * @return void
+     */
+    public static function yarConcurrentCall($uri, $method, $parameters, $callback, $timeout = 3000)
+    {
+        \Yar_Concurrent_Client::call($uri, $method, $parameters, $callback, null, array(
+            YAR_OPT_PACKAGER => 'php',
+            YAR_OPT_TIMEOUT => $timeout,
+            YAR_OPT_CONNECT_TIMEOUT => $timeout
+        ));
+    }
+
+    public static function yarConcurrentLoop($callback = null)
+    {
+        \Yar_Concurrent_Client::loop($callback);
+    }
+
+    /**
+     * 提交json格式数据请求java有关接口
+     *
+     * @param string $url 接口URL
+     * @param array $data 参数列表
+     * @param bool $returnJson 控制是否返回json格式数据
+     * @param int $timeout 超时时间
+     * @param array $cookie
+     * @return mixed
+     */
+    public static function jsonPost($url, $data = array(), $returnJson = false, $timeout = 10, $cookie = array())
+    {
+        $ch = curl_init($url);
+
+        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
+
+        if (!empty($cookie)) {
+            $cookie_str = array();
+            foreach ($cookie as $key => $val) {
+                $cookie_str[] = urlencode($key) . '=' . urlencode($val);
+            }
+            curl_setopt($ch, CURLOPT_COOKIE, implode(';', $cookie_str));
+        }
+
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+
+        if (!empty($data)) {
+            $data_string = json_encode($data);
+
+            curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
+            // 设置json的Header
+            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
+                'Content-Type: application/json',
+                'Content-Length: ' . strlen($data_string)
+            ));
+        }
+        $result = curl_exec($ch);
+        if (!$returnJson && !empty($result)) {
+            $result = json_decode($result, true);
+        }
+        curl_close($ch);
+        $data = array();
+
+        return $result;
+    }
+
+}
diff --git a/library/LibModels/Wap/Home/CartData.php b/library/LibModels/Wap/Home/CartData.php
index 4fa05d7..8b6ac17 100644
--- a/library/LibModels/Wap/Home/CartData.php
+++ b/library/LibModels/Wap/Home/CartData.php
@@ -248,13 +248,15 @@ class CartData
      *
      * @param int $uid 用户ID
      * @param string $cartType 购物车类型,ordinary表示普通购物车
+     * @param int $isUseYohoCoin 是否使用有货币,默认0不使用, 1使用
      * @return array 接口返回的数据
      */
-    public static function cartPay($uid, $cartType)
+    public static function cartPay($uid, $cartType, $isUseYohoCoin = 0)
     {
         $param = Yohobuy::param();
         $param['method'] = 'app.Shopping.payment';
         $param['cart_type'] = $cartType;
+        $param['yoho_coin_mode'] = $isUseYohoCoin;
         $param['uid'] = $uid;
         $param['client_secret'] = Sign::getSign($param);
 
diff --git a/static/js/cart/good.js b/static/js/cart/good.js
index d63f07a..a4a04cb 100644
--- a/static/js/cart/good.js
+++ b/static/js/cart/good.js
@@ -12,8 +12,6 @@ var $ = require('jquery'),
 var dialog = require('../me/dialog'),
     tip = require('../plugin/tip');
 
-// orderInfo = require('./order-info').orderInfo;
-
 var $selectAllBtn = $('.balance .checkbox'),
     requesting = false;
 
@@ -107,9 +105,7 @@ $('.icon-del').on('touchstart', function(e) {
                     autoHide: true,
                     fast: true
                 });
-
-                // orderInfo('couponCode', null);
-                // orderInfo('couponName', null);
+                window.setCookie('order-info', '');
                 window.setCookie('_yoho-cart-refreshByDelete', true);
                 window.location.href = '/cart/index/index?cartType=' + $('#cartType').val();
             } else {
diff --git a/static/js/cart/order-ensure.js b/static/js/cart/order-ensure.js
index a8375b4..2df0654 100644
--- a/static/js/cart/order-ensure.js
+++ b/static/js/cart/order-ensure.js
@@ -88,7 +88,11 @@ $('.invoice').on('touchend', '.checkbox', function() {
     }
 });
 
-function orderCompute() {
+function orderCompute(firstEnter) {
+    var yohoCoin = orderInfo('yohoCoin');
+    if (firstEnter) {
+        yohoCoin = 0;
+    }
     $.ajax({
         method: 'POST',
         url: '/cart/index/orderCompute',
@@ -97,7 +101,7 @@ function orderCompute() {
             deliveryId: orderInfo('deliveryId'),
             paymentTypeId: orderInfo('paymentTypeId'),
             couponCode: orderInfo('couponCode'),
-            yohoCoin: orderInfo('yohoCoin')
+            yohoCoin: yohoCoin
         }
     }).then(function(res) {
         var priceHtml;
@@ -127,7 +131,7 @@ function orderCompute() {
 }
 
 // 进入页面计算一次价格
-orderCompute();
+//orderCompute(1);
 
 function submitOrder() {
     var invoiceText = $invoice.find('[name="invoice-title"]').val() || orderInfo('invoiceText'),
diff --git a/template/m.yohobuy.com/actions/cart/index/order-ensure.phtml b/template/m.yohobuy.com/actions/cart/index/order-ensure.phtml
index b370e70..5067309 100644
--- a/template/m.yohobuy.com/actions/cart/index/order-ensure.phtml
+++ b/template/m.yohobuy.com/actions/cart/index/order-ensure.phtml
@@ -69,7 +69,7 @@
                 <span class="title">YOHO币</span>
 
                 {{#if yohoCoin}}
-                <span class="desc used {{#unless useYohoCoin}}hide{{/if}}">已抵¥{{useYohoCoin}}</span>
+                <span class="desc used {{#unless useYohoCoin}}hide{{/unless}}">已抵¥{{useYohoCoin}}</span>
                 <span class="desc can-use {{#if useYohoCoin}}hide{{/if}}">可抵¥{{yohoCoin}}</span>
 
                 {{#if useYohoCoin}}
diff --git a/yohobuy/m.yohobuy.com/application/models/Index/Cart.php b/yohobuy/m.yohobuy.com/application/models/Index/Cart.php
index 2562894..1e55f19 100644
--- a/yohobuy/m.yohobuy.com/application/models/Index/Cart.php
+++ b/yohobuy/m.yohobuy.com/application/models/Index/Cart.php
@@ -449,7 +449,11 @@ class CartModel
 
             // 有货币
             $result['yohoCoin'] = $payReturn['yoho_coin'];
-            $result['useYohoCoin'] = isset($orderCompute['use_yoho_coin']) ? $orderCompute['use_yoho_coin'] : $payReturn['use_yoho_coin'];
+            /*
+             * 默认使用有货币
+             * $result['useYohoCoin'] = isset($orderCompute['use_yoho_coin']) ? $orderCompute['use_yoho_coin'] : $payReturn['use_yoho_coin'];
+             */
+            $result['useYohoCoin'] = isset($orderCompute['use_yoho_coin']) ? $orderCompute['use_yoho_coin'] : false;
 
             // 订单数据
             if (isset($payReturn['shopping_cart_data']) && !empty($payReturn['shopping_cart_data'])) {