很多時候,在項目開發的時候需要用到微信支付接口調用,例如:商城制作、在線繳費、保險繳費等等,小編最近做了幾個水費收費系統、保函出具系統、在線報名系統,均用到了微信支付,以下把微信支付的制作以及支付后的幾種狀態說明列出,希望對大家有所幫助。
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以內聯圖像數據(即在@@##@@標記內) ????$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; }
2 微信支付時attach參數的設置
attach,官方解釋:附加數據,在查詢API和支付通知中原樣返回,可作為自定義參數使用,實際情況下只有支付完成狀態才會返回該字段。有時我們在開發時需要在查詢訂單時返回一些特定的數值,比如:會員ID、支付訂單ID、申請ID、會員名稱等等,這時可以使用attach進行傳遞參數,但是attach是一個字符串,有時往往傳值的是數組,那么只需要利json_encode進行轉化即可,例如:
立即學習“PHP免費學習筆記(深入)”;
$remarks?=?array( ????'cid'=>1, ????'member_id'=>2, ????'apply_id'=>28, ); $attach?=?json_encode($remarks);
查詢訂單后,再用json_decode進行轉化,例如:
$arr?=?json_decode($result['attach'],true);
這里得到的$arr是一個數組,直接按照數組的調用規則調用即可
3 微信支付的幾種狀態
當所查詢的訂單信息不存在時,返回如下:
array(9)?{ ??["appid"]?=>?string(18)?"公眾號APPId" ??["err_code"]?=>?string(13)?"ORDERNOTEXIST" ??["err_code_des"]?=>?string(15)?"訂單不存在" ??["mch_id"]?=>?string(10)?"商戶ID" ??["nonce_str"]?=>?string(16)?"H0K6KPemexExM5DV" ??["result_code"]?=>?string(4)?"FAIL" ??["return_code"]?=>?string(7)?"SUCCESS" ??["return_msg"]?=>?string(2)?"OK" ??["sign"]?=>?string(64)?"8779CA8C7F4931B4296C19FFFB176A3111F74B7244123A0C0EB7AD8DB2B1BDA49DA" }
當所查詢的訂單信息支付失敗,返回如下:
array(11)?{ ??["appid"]?=>?string(18)?"公眾號APPId" ??["attach"]?=>?string(13)?"你的傳參值" ??["mch_id"]?=>?string(10)?"商戶ID" ??["nonce_str"]?=>?string(16)?"BR3zfazCdI3vZj5e" ??["out_trade_no"]?=>?string(13)?"1636555204840" ??["result_code"]?=>?string(7)?"SUCCESS" ??["return_code"]?=>?string(7)?"SUCCESS" ??["return_msg"]?=>?string(2)?"OK" ??["sign"]?=>?string(64)?"7927EC724A7FDBFF034621B1EC492DB4D130AC13A43E4C66C7B6AD7889736CD5" ??["trade_state"]?=>?string(6)?"NOTPAY" ??["trade_state_desc"]?=>?string(15)?"訂單未支付" }
當所查詢訂單信息存在時返回如下:
array(21)?{ ??["appid"]?=>?string(18)?"公眾號APPId" ??["attach"]?=>?string(13)?"你的傳參值" ??["bank_type"]?=>?string(10)?"LZB_CREDIT" ??["cash_fee"]?=>?string(4)?"2000" ??["cash_fee_type"]?=>?string(3)?"CNY" ??["fee_type"]?=>?string(3)?"CNY" ??["is_subscribe"]?=>?string(1)?"Y" ??["mch_id"]?=>?string(10)?"商戶ID" ??["nonce_str"]?=>?string(16)?"Y8iYqXqHfs22hexX" ??["openid"]?=>?string(28)?"支付者微信openid" ??["out_trade_no"]?=>?string(13)?"1636600772812" ??["result_code"]?=>?string(7)?"SUCCESS" ??["return_code"]?=>?string(7)?"SUCCESS" ??["return_msg"]?=>?string(2)?"OK" ??["sign"]?=>?string(64)?"7AC36F5EA6C4EE5D33584F0F1CDB54F804F0B196B49B61A4FFB6C045D521DA3C" ??["time_end"]?=>?string(14)?"20211111111938" ??["total_fee"]?=>?string(4)?"2000" ??["trade_state"]?=>?string(7)?"SUCCESS" ??["trade_state_desc"]?=>?string(12)?"支付成功" ??["trade_type"]?=>?string(5)?"JSAPI" ??["transaction_id"]?=>?string(28)?"4200001198202111115284536175" }
Native支付成功
array(22)?{ ??["appid"]?=>?string(18)?"公眾號APPId" ??["attach"]?=>?string(13)?"你的傳參值" ??["bank_type"]?=>?string(6)?"OTHERS" ??["cash_fee"]?=>?string(1)?"1" ??["cash_fee_type"]?=>?string(3)?"CNY" ??["device_info"]?=>?string(1)?"1" ??["fee_type"]?=>?string(3)?"CNY" ??["is_subscribe"]?=>?string(1)?"Y" ??["mch_id"]?=>?string(10)?"商戶ID" ??["nonce_str"]?=>?string(16)?"Y8iYqXqHfs22hexX" ??["openid"]?=>?string(28)?"支付者微信openid" ??["out_trade_no"]?=>?string(13)?"1642682408295" ??["result_code"]?=>?string(7)?"SUCCESS" ??["return_code"]?=>?string(7)?"SUCCESS" ??["return_msg"]?=>?string(2)?"OK" ??["sign"]?=>?string(64)?"2F25084A568BBDA805DA8EE3FEB846448C9778DCBC2B745E8210D950E0742E38" ??["time_end"]?=>?string(14)?"20220120204024" ??["total_fee"]?=>?string(1)?"1" ??["trade_state"]?=>?string(7)?"SUCCESS" ??["trade_state_desc"]?=>?string(12)?"支付成功" ??["trade_type"]?=>?string(6)?"NATIVE" ??["transaction_id"]?=>?string(28)?"4200001358202201201811257221" }
以上便是小編總結的幾點微信支付的相關知識,希望對各位開發者有所幫助!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END