站长图库向大家介绍了ThinkPhp5.1微信支付,微信支付状态等相关知识,希望对您有所帮助
很多时候,在项目开发的时候需要用到微信支付接口调用,例如:商城制作、在线缴费、保险缴费等等,小编最近做了几个水费收费系统、保函出具系统、在线报名系统,均用到了微信支付,以下把微信支付的制作以及支付后的几种状态说明列出,希望对大家有所帮助。
微信支付
【扫码支付】
public function wxPayImg($body,$out_trade_no,$fee,$product_id,$logo,$path,$attach,$pro_id){ require_once Env::get('app_path')."api/wxpay/lib/WxPay.Api.php"; //实例化配置信息 $config = new WxPayConfig(); $input = new \WxPayUnifiedOrder(); //设置商品描述 $input->SetBody($body); //设置订单号 $input->SetOut_trade_no($out_trade_no); //设置商品金额(单位:分) $input->SetTotal_fee($fee); //设置异步通知地址 $notify = $config->GetNotifyUrl(); $input->SetNotify_url($notify); //设置交易类型 $input->SetTrade_Type('NATIVE'); //设置商品ID $input->SetProduct_id($product_id); $input->SetDevice_info($pro_id); $input->SetAttach($attach); //调用统一下单API $result = \WxPayApi::unifiedOrder($config,$input); //dump($result); $qr_url = $result['code_url']; $img = $this->createCode($qr_url,$logo,$path); //生成数组 $array = array('img'=>$img,'out_trade_no'=>$out_trade_no); return $array;}//生成二维码public function createCode($code_url,$logo,$path){ //创建基本的QR码 $qrCode = new QrCode($code_url); $qrCode->setSize(300); //设置高级选项 $qrCode->setWriterByName('png'); $qrCode->setEncoding('UTF-8'); $qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH()); $qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]); $qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]); //$qrCode->setLabel('', 16, App::getAppPath().'/../public/static/user/font/msyhl.ttc', LabelAlignment::CENTER()); $qrCode->setLogoPath($logo); $qrCode->setLogoWidth(50); $qrCode->setValidateResult(false); //边距设置 $qrCode->setMargin(10); //直接输出二维码 header('Content-Type: '.$qrCode->getContentType()); //echo $qrCode->writeString(); //将二维码保存到指定目录 $qrCode->writeFile($path); //生成数据URI以内联图像数据(即在<img>标记内) $dataUri = $qrCode->writeDataUri(); return $dataUri;}【JSAPI接口支付】
public function jsApiPay($openId,$Body,$out_trade_no,$fee,$product_id,$attach){ require_once Env::get('app_path')."api/wxpay/lib/WxPay.Api.php"; $tools = new JsApiPay(); $input = new \WxPayUnifiedOrder(); //设置商品描述 $input->SetBody($Body); //设置订单号 $input->SetOut_trade_no($out_trade_no); //设置商品金额(单位:分) $input->SetTotal_fee($fee); //设置异步通知地址 $config = new WxPayConfig(); $notify = $config->GetNotifyUrl(); $input->SetNotify_url($notify); //设置交易类型 $input->SetTrade_Type('JSAPI'); //设置商品ID $input->SetProduct_id($product_id); //用户openID $input->SetOpenid($openId); $input->SetAttach($attach); //调用统一下单API $result = \WxPayApi::unifiedOrder($config,$input); $jsApiParameters = $tools->GetJsApiParameters($result); return $jsApiParameters;}【订单查询】
public function QueryOrder($number,$transaction_id=NULL){ require_once App::getAppPath().'api/wxpay/lib/WxPay.Api.php'; require_once App::getAppPath().'api/wxpay/lib/WxPay.Notify.php'; $input = new \WxPayOrderQuery(); $input->SetOut_trade_no($number); $input->SetTransaction_id($transaction_id); $config = new WxPayConfig(); $result = \WxPayApi::orderQuery($config, $input); if($result['result_code']=='SUCCESS'){ if($result['trade_state']=='SUCCESS'){ $arr = json_decode($result['attach'],true); $pay_time = $this->getPayTime($result['time_end']); return ['code'=>100,'result_code'=>$result['result_code'],'attach'=>$arr,'pay_time'=>$pay_time,'result'=>$result,'msg'=>"支付成功"]; }else{ return ['code'=>101,'result_code'=>$result['result_code'],'err_code'=>$result['err_code'],'result'=>$result,'msg'=>"订单未支付"]; } }else{ return ['code'=>103,'result_code'=>$result['result_code'],'result'=>$result,'msg'=>"订单不存在"]; } //dump($result); //return $result;}微信支付时attach参数的设置
attach,官方解释:附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用,实际情况下只有支付完成状态才会返回该字段。有时我们在开发时需要在查询订单时返回一些特定的数值,比如:会员ID、支付订单ID、申请ID、会员名称等等,这时可以使用attach进行传递参数,但是attach是一个字符串,有时往往传值的是数组,那么只需要利json_encode进行转化即可,例如:<

