周大胖子 发表于 2021-11-12 11:08:58

微信支付201 商户号重复问题 [以及 报错 解决方法]

注意报错表象:可能是prepay_id没找到

还有一个可能: PC端 和手机端 生成的商户号,重复了,[如果单单生成PC端 或者单单生成手机端都没有问题]
//返回值为微信支付的配置项
    public function createOrder($id)
    {
      //拿着这个案件的ID 重新 发起对朱自宇的请求
      $config = session('wechat_config');
      
      // dd($config['java_url'],$id);
    //   dd($config);
      
      $url = $config['java_url'].'pt/patentMain/weiXinPay/payInfo/id/'.$id;
      
      $zdata = $this->send_request($url,"GET");
      
      $zdata = json_decode($zdata['data']);
      
      $useData = $zdata->data;
      
      if($zdata->status !=200){
            return ['status'=>0,'message'=>'获取失败,当前ID 不被 相关系统 适配,请联系客服'];
      }
      
      // dd($useData->fee,$useData->lateFee);
      
      // dd($data);
      // return ['status'=>200,'data'=>$zdata['data']];
      
      
      
      // OrdPayLogs
      
      // 对数据库的判断如下
      // 1. 查询是否有该条数据, 是的话更新 这个值的 fee.与 lateFee
      // 2. 如果没有 那么 直接增加 就可以了
      
      $ord_id = $id;
      
         // 已经登录过
      $user = session('wechat_user');
      
      // dd( $user );
      
      $openid = $user['id'];
      
      $ordData = OrdPayLogs::where([
                  'ord_id'=>['=' => $ord_id] ,
                  'company_id'=>['='=> $config['company_id']],
                  'year'=>['=' => $useData->year] ,
                  ])->first();
      
      $payId = 0;

      if($ordData === null){
            
            $order = new OrdPayLogs;
            $order->ord_id = $ord_id;
            $order->wx_id = $config['id'];
            $order->openid = $openid;
            $order->name = $useData->ptNameText;
            $order->fee = $useData->fee;
            $order->late_fee = $useData->lateFee;
            $order->company_id = $config['company_id'];
            $order->payment_status = 1;
            $order->total_price = $useData->fee + $useData->lateFee;
            $order->year = $useData->year;
            $order->save();
            
            // dd($order->id);
            $payId = $order->id;
      }else{
            
            // 如果是 那么修改当前数据
            OrdPayLogs::where([
                  'ord_id'=>['=' => $ord_id] ,
                  'company_id'=>['='=> $config['company_id']],
                  'year'=>['=' => $useData->year] ,
                ])->update([
                  'fee' => $useData->fee,
                  'late_fee' =>$useData->lateFee,
                  'total_price' => $useData->fee + $useData->lateFee
                ]);
            
            $payId = $ordData->id;
            
         if($ordData->payment_status ==3){
                return [
                  'state'=>201,
                  'message' =>'当前订单已完成支付',
                ];
            }
            // dd('这是修改');
      }
      
      // dd($payId);
   
      // dd(222);
      
      // 开始生成支付配置 ======
      $payConfig = [
            // 必要配置
            'app_id'             => $config['app_id'],
            'mch_id'             => $config['mch_id'],
            'key'                => $config['key'],   // API 密钥 在商户的API 安全界面设置

            // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
            'cert_path'          => '', // XXX: 绝对路径!!!!
            'key_path'         => '',      // XXX: 绝对路径!!!!

            'notify_url'         => 'http://wx.qancloud.com/out/payback',   // 你也可以在下单时单独设置来想覆盖它
      ];
      
      // dd($payConfig );
      
      $app = Factory::payment($payConfig);

      $result = $app->order->unify([
            'body' => '专利费用缴纳'.$useData->ptNameText,
            'out_trade_no' => $payId,
            // 'total_fee' => ($useData->fee + $useData->lateFee)*100,
            'total_fee' => 1,
            'spbill_create_ip' => '', // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址
            'notify_url' => 'http://wx.qancloud.com/out/payback', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
            'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
            'openid' => $openid,
      ]);
      
      // dd($result);
      if(isset($result['prepay_id'])){
            
            $payment = Factory::payment($payConfig);

            $jssdk = $payment->jssdk;
   
            $json = $jssdk->bridgeConfig($result['prepay_id']);
   
   
            return [
                'state'=>200,
                'message' =>'获取信息成功',
                'data' => json_decode($json)
            ];
      }else{
            
            return [
                'state'=>202,
                'message' =>'订单错误'.$result['err_code_des'],
                'data' => $result
            ];
      }
      
      
      
      
      

    }贴一个 全代码
页: [1]
查看完整版本: 微信支付201 商户号重复问题 [以及 报错 解决方法]