昨天做一个微信小程序支付的时候调取JsApiPay获取params发现一直失败,因为之前一直使用的JsApiPay并没有出现问题,以为是自己参数错误,测试后发现一直返回为空,先看代码

      $this->load->library('wx/JsApiPay');
        // // 统一下单
        $input = new WxPayUnifiedOrder();

        $input->SetMch_id($mchid);
        $input->SetAppid($appid);
        $input->SetBody("小程序商品支付");
        $input->SetAttach('订单号123456789');
        $input->SetOut_trade_no($ordersnPlus);
        $input->SetTotal_fee(number_format(29900);
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
        $input->SetNotify_url("https://****.com");
        $input->SetTrade_type("JSAPI");
        $input->SetOpenid($openid);
 
        try
        {
            $unifiedOrder = WxPayApi::unifiedOrder($input);
           
        }
        catch (Exception $e)
        {
            $this->response($e, REST_Controller::HTTP_OK);
          
        }

        $params = $this->jsapipay->GetJsApiParameters($unifiedOrder);

不清楚为什么为空,按理说如果有问题应该走catch的,看了下错误提示也很详细,然后打印了下 $unifiedOrder发现提示了一个curl错误,错误码是60,然后百度发现是微信小程序SDK中curl需要https,不知道算不算BUG,之前也没有使用https没有出问题,

解决方案是在wxPayAPI.php文件中大概565行的


            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验

 

 替换为

     if(stripos($url,"https://")!==FALSE){
            curl_setopt($ch,CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE);
        }else{
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
        }
        

 

posted on 2019-08-14 14:24  代码书写人生  阅读(861)  评论(0编辑  收藏  举报