• 微信小程序支付获取params的时候使用JsApiPay失败


    昨天做一个微信小程序支付的时候调取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);//严格校验
            }
            
  • 相关阅读:
    去除金额千分位,还原成数字
    替换对象的key
    合并两个对象的属性
    js常用数组方法
    document对象的一些属性
    js数字四舍五入保留n位小数
    js时间日期类常用方法
    数字转换成千分位格式
    valueOf获取日期时间初始值
    常见的数据库Cause:Packet for query is too large(xxx > 1024)
  • 原文地址:https://www.cnblogs.com/zdzdbk/p/11351673.html
Copyright © 2020-2023  润新知