微信支付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]