資源簡介
【實例簡介】
微信支付
【核心代碼】
namespace Home\Controller; use Think\Controller; class WxpayController extends Controller { //初始化 public function _initialize() { //獲取來源地址 $URL['PHP_SELF'] = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : (isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : $_SERVER['ORIG_PATH_INFO']); //當前頁面名稱 $URL['DOMAIN'] = $_SERVER['SERVER_NAME']; //域名(主機名) $URL['QUERY_STRING'] = $_SERVER['QUERY_STRING']; //URL 參數(shù) $URL['URI'] = $URL['PHP_SELF'].($URL['QUERY_STRING'] ? "?".$URL['QUERY_STRING'] : ""); $this->fromurl = "http://".$URL['DOMAIN'].$URL['PHP_SELF'].($URL['QUERY_STRING'] ? "_".$URL['QUERY_STRING'] : ""); //完整URL地址 } public function new_pay(){ //全局引入微信支付類 Vendor('Wxpay.WxPayPubHelper.WxPayPubHelper'); //使用jsapi接口 $jsApi = new \JsApi_pub(); //=========步驟1:網(wǎng)頁授權獲取用戶openid============ //通過code獲得openid if (!isset($_GET['code'])) { //觸發(fā)微信返回code碼 $url = $jsApi->createOauthUrlForCode($this->fromurl); Header("Location: $url"); }else { //獲取code碼,以獲取openid $code = $_GET['code']; $jsApi->setCode($code); $openid = $jsApi->getOpenId(); } //=========步驟2:使用統(tǒng)一支付接口,獲取prepay_id============ //使用統(tǒng)一支付接口 $unifiedOrder = new \UnifiedOrder_pub(); //設置統(tǒng)一支付接口參數(shù) //設置必填參數(shù) //appid已填,商戶無需重復填寫 //mch_id已填,商戶無需重復填寫 //noncestr已填,商戶無需重復填寫 //spbill_create_ip已填,商戶無需重復填寫 //sign已填,商戶無需重復填寫 $unifiedOrder->setParameter("openid",$openid);//商品描述 $unifiedOrder->setParameter("body","貢獻一分錢");//商品描述 //自定義訂單號,此處僅作舉例 $timeStamp = time(); $out_trade_no = \WxPayConf_pub::APPID.$timeStamp; $unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商戶訂單號 $unifiedOrder->setParameter("total_fee","1");//總金額 $unifiedOrder->setParameter("notify_url",\WxPayConf_pub::NOTIFY_URL);//通知地址 $unifiedOrder->setParameter("trade_type","JSAPI");//交易類型 //非必填參數(shù),商戶可根據(jù)實際情況選填 //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商戶號 //$unifiedOrder->setParameter("device_info","XXXX");//設備號 //$unifiedOrder->setParameter("attach","XXXX");//附加數(shù)據(jù) //$unifiedOrder->setParameter("time_start","XXXX");//交易起始時間 //$unifiedOrder->setParameter("time_expire","XXXX");//交易結束時間 //$unifiedOrder->setParameter("goods_tag","XXXX");//商品標記 //$unifiedOrder->setParameter("openid","XXXX");//用戶標識 //$unifiedOrder->setParameter("product_id","XXXX");//商品ID $prepay_id = $unifiedOrder->getPrepayId(); //=========步驟3:使用jsapi調起支付============ $jsApi->setPrepayId($prepay_id); $jsApiParameters = $jsApi->getParameters(); $this->assign('jsApiParameters',$jsApiParameters); $this->display(); } //JSAPI支付通知 public function notify(){ //使用通用通知接口 $notify = new \Notify_pub(); //存儲微信的回調 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; $notify->saveData($xml); //驗證簽名,并回應微信。 //對后臺通知交互時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗, //微信會通過一定的策略(如30分鐘共8次)定期重新發(fā)起通知, //盡可能提高通知的成功率,但微信不保證通知最終能成功。 if($notify->checkSign() == FALSE){ $notify->setReturnParameter("return_code","FAIL");//返回狀態(tài)碼 $notify->setReturnParameter("return_msg","簽名失敗");//返回信息 }else{ $notify->setReturnParameter("return_code","SUCCESS");//設置返回碼 } $returnXml = $notify->returnXml(); echo $returnXml; //==商戶根據(jù)實際情況設置相應的處理流程,此處僅作舉例======= //以log文件形式記錄回調信息 // $log_ = new Log_(); $log_name= __ROOT__."/Public/Weixin/notify_url.log";//log文件路徑 log_result($log_name,"【接收到的notify通知】:\n".$xml."\n"); if($notify->checkSign() == TRUE) { if ($notify->data["return_code"] == "FAIL") { //此處應該更新一下訂單狀態(tài),商戶自行增刪操作 log_result($log_name,"【通信出錯】:\n".$xml."\n"); } elseif($notify->data["result_code"] == "FAIL"){ //此處應該更新一下訂單狀態(tài),商戶自行增刪操作 log_result($log_name,"【業(yè)務出錯】:\n".$xml."\n"); } else{ //此處應該更新一下訂單狀態(tài),商戶自行增刪操作 log_result($log_name,"【支付成功】:\n".$xml."\n"); } //商戶自行增加處理流程, //例如:更新訂單狀態(tài) //例如:數(shù)據(jù)庫操作 //例如:推送支付完成信息 } } //掃碼微信支付模式一 public function native_pay() { //全局引入微信支付類 Vendor('Wxpay.WxPayPubHelper.WxPayPubHelper'); //設置靜態(tài)鏈接 $nativeLink = new \NativeLink_pub(); //設置靜態(tài)鏈接參數(shù) //設置必填參數(shù) //appid已填,商戶無需重復填寫 //mch_id已填,商戶無需重復填寫 //noncestr已填,商戶無需重復填寫 //time_stamp已填,商戶無需重復填寫 //sign已填,商戶無需重復填寫 $product_id = \WxPayConf_pub::APPID."static";//自定義商品id $nativeLink->setParameter("product_id",$product_id);//商品id //獲取鏈接 $product_url = $nativeLink->getUrl(); //使用短鏈接轉換接口 $shortUrl = new \ShortUrl_pub(); //設置必填參數(shù) //appid已填,商戶無需重復填寫 //mch_id已填,商戶無需重復填寫 //noncestr已填,商戶無需重復填寫 //sign已填,商戶無需重復填寫 $shortUrl->setParameter("long_url",$product_url);//URL鏈接 //獲取短鏈接 $codeUrl = $shortUrl->getShortUrl(); $this->assign('product_url',$product_url); $this->assign('codeUrl',$codeUrl); $this->display(); } //掃碼支付通知 public function todoPost() { //全局引入微信支付類 Vendor('Wxpay.WxPayPubHelper.WxPayPubHelper'); //以log文件形式記錄回調信息,用于調試 $log_name = __ROOT__."/Public/Weixin/native_call.log"; //使用native通知接口 $nativeCall = new \NativeCall_pub(); //接收微信請求 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; log_result($log_name,"【接收到的native通知】:\n".$xml."\n"); $nativeCall->saveData($xml); if($nativeCall->checkSign() == FALSE){ $nativeCall->setReturnParameter("return_code","FAIL");//返回狀態(tài)碼 $nativeCall->setReturnParameter("return_msg","簽名失敗");//返回信息 } else { //提取product_id $product_id = $nativeCall->getProductId(); //使用統(tǒng)一支付接口 $unifiedOrder = new \UnifiedOrder_pub(); //根據(jù)不同的$product_id設定對應的下單參數(shù),此處只舉例一種 switch ($product_id) { case \WxPayConf_pub::APPID."static"://與native_call_qrcode.php中的靜態(tài)鏈接二維碼對應 //設置統(tǒng)一支付接口參數(shù) //設置必填參數(shù) //appid已填,商戶無需重復填寫 //mch_id已填,商戶無需重復填寫 //noncestr已填,商戶無需重復填寫 //spbill_create_ip已填,商戶無需重復填寫 //sign已填,商戶無需重復填寫 $unifiedOrder->setParameter("body","貢獻一分錢");//商品描述 //自定義訂單號,此處僅作舉例 $timeStamp = time(); $out_trade_no = \WxPayConf_pub::APPID.$timeStamp; $unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商戶訂單號 $unifiedOrder->setParameter("product_id","$product_id");//商品ID $unifiedOrder->setParameter("total_fee","1");//總金額 $unifiedOrder->setParameter("notify_url",\WxPayConf_pub::NOTIFY_URL);//通知地址 $unifiedOrder->setParameter("trade_type","NATIVE");//交易類型 $unifiedOrder->setParameter("product_id",$product_id);//用戶標識 //非必填參數(shù),商戶可根據(jù)實際情況選填 //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商戶號 //$unifiedOrder->setParameter("device_info","XXXX");//設備號 //$unifiedOrder->setParameter("attach","XXXX");//附加數(shù)據(jù) //$unifiedOrder->setParameter("time_start","XXXX");//交易起始時間 //$unifiedOrder->setParameter("time_expire","XXXX");//交易結束時間 //$unifiedOrder->setParameter("goods_tag","XXXX");//商品標記 //$unifiedOrder->setParameter("openid","XXXX");//用戶標識 //獲取prepay_id $prepay_id = $unifiedOrder->getPrepayId(); //設置返回碼 //設置必填參數(shù) //appid已填,商戶無需重復填寫 //mch_id已填,商戶無需重復填寫 //noncestr已填,商戶無需重復填寫 //sign已填,商戶無需重復填寫 $nativeCall->setReturnParameter("return_code","SUCCESS");//返回狀態(tài)碼 $nativeCall->setReturnParameter("result_code","SUCCESS");//業(yè)務結果 $nativeCall->setReturnParameter("prepay_id",$prepay_id);//預支付ID break; default: //設置返回碼 //設置必填參數(shù) //appid已填,商戶無需重復填寫 //mch_id已填,商戶無需重復填寫 //noncestr已填,商戶無需重復填寫 //sign已填,商戶無需重復填寫 $nativeCall->setReturnParameter("return_code","SUCCESS");//返回狀態(tài)碼 $nativeCall->setReturnParameter("result_code","FAIL");//業(yè)務結果 $nativeCall->setReturnParameter("err_code_des","此商品無效");//業(yè)務結果 break; } } //將結果返回微信 $returnXml = $nativeCall->returnXml(); log_result($log_name,"【返回微信的native響應】:\n".$returnXml."\n"); echo $returnXml; } //微信掃碼支付 模式2 public function native_pays(){ //全局引入微信支付類 Vendor('Wxpay.WxPayPubHelper.WxPayPubHelper'); //使用統(tǒng)一支付接口 $unifiedOrder = new \UnifiedOrder_pub(); //設置統(tǒng)一支付接口參數(shù) //設置必填參數(shù) //appid已填,商戶無需重復填寫 //mch_id已填,商戶無需重復填寫 //noncestr已填,商戶無需重復填寫 //spbill_create_ip已填,商戶無需重復填寫 //sign已填,商戶無需重復填寫 $unifiedOrder->setParameter("body","貢獻一分錢");//商品描述 //自定義訂單號,此處僅作舉例 $timeStamp = time(); $out_trade_no = \WxPayConf_pub::APPID.$timeStamp; $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商戶訂單號 $unifiedOrder->setParameter("total_fee","1");//總金額 $unifiedOrder->setParameter("notify_url", \WxPayConf_pub::NOTIFY_URL);//通知地址 $unifiedOrder->setParameter("trade_type","NATIVE");//交易類型 //非必填參數(shù),商戶可根據(jù)實際情況選填 //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商戶號 //$unifiedOrder->setParameter("device_info","XXXX");//設備號 //$unifiedOrder->setParameter("attach","XXXX");//附加數(shù)據(jù) //$unifiedOrder->setParameter("time_start","XXXX");//交易起始時間 //$unifiedOrder->setParameter("time_expire","XXXX");//交易結束時間 //$unifiedOrder->setParameter("goods_tag","XXXX");//商品標記 //$unifiedOrder->setParameter("openid","XXXX");//用戶標識 //$unifiedOrder->setParameter("product_id","XXXX");//商品ID //獲取統(tǒng)一支付接口結果 $unifiedOrderResult = $unifiedOrder->getResult(); //商戶根據(jù)實際情況設置相應的處理流程 if ($unifiedOrderResult["return_code"] == "FAIL") { //商戶自行增加處理流程 echo "通信出錯:".$unifiedOrderResult['return_msg']."<br>"; } elseif($unifiedOrderResult["result_code"] == "FAIL") { //商戶自行增加處理流程 echo "錯誤代碼:".$unifiedOrderResult['err_code']."<br>"; echo "錯誤代碼描述:".$unifiedOrderResult['err_code_des']."<br>"; } elseif($unifiedOrderResult["code_url"] != NULL) { //從統(tǒng)一支付接口獲取到code_url $code_url = $unifiedOrderResult["code_url"]; //商戶自行增加處理流程 //...... } $this->assign('out_trade_no',$out_trade_no); $this->assign('code_url',$code_url); $this->assign('unifiedOrderResult',$unifiedOrderResult); $this->display(); } //刷卡支付 public function micropay() { Vendor('Wxpay.WxPayMicropayHelper.WxPayMicropayHelper'); //自定義訂單號,此處僅作舉例 $timeStamp = time(); $out_trade_no = \WxPayConf_micropay::APPID.$timeStamp; //獲取用戶一維碼 if (isset($_POST["auth_code"])) { $auth_code = $_POST["auth_code"]; //使用被掃支付接口 $micropayCall = new \MicropayCall(); //設置被掃支付接口參數(shù) //設置必填參數(shù) //appid已填,商戶無需重復填寫 //mch_id已填,商戶無需重復填寫 //noncestr已填,商戶無需重復填寫 //spbill_create_ip已填,商戶無需重復填寫 //sign已填,商戶無需重復填寫 $micropayCall->setParameter("body","貢獻一分錢");//商品描述 $micropayCall->setParameter("out_trade_no","$out_trade_no");//商戶訂單號 $micropayCall->setParameter("total_fee","1");//總金額 $micropayCall->setParameter("auth_code","$auth_code");//交易類型 //非必填參數(shù),商戶可根據(jù)實際情況選填 //$micropayCall->setParameter("sub_mch_id","XXXX");//子商戶號 //$micropayCall->setParameter("device_info","XXXX");//設備號 //$micropayCall->setParameter("attach","XXXX");//附加數(shù)據(jù) //$micropayCall->setParameter("time_start","XXXX");//交易起始時間 //$micropayCall->setParameter("time_expire","XXXX");//交易結束時間 //$micropayCall->setParameter("goods_tag","XXXX");//商品標記 //$micropayCall->setParameter("openid","XXXX");//用戶標識 //$micropayCall->setParameter("product_id","XXXX");//商品ID //提交訂單 $micropayCallResult = $micropayCall->getResult(); //商戶根據(jù)實際情況設置相應的處理流程,此處僅作舉例 if ($micropayCallResult["return_code"] == "FAIL") { echo "通信出錯:".$micropayCallResult['return_msg']."<br>"; } elseif($micropayCallResult["result_code"] == "FAIL") { echo "出錯"."<br>"; echo "錯誤代碼:".$micropayCallResult['err_code']."<br>"; echo "錯誤代碼描述:".$micropayCallResult['err_code_des']."<br>"; } else { echo "用戶標識:".$micropayCallResult['openid']."<br>"; echo "是否關注公眾賬號:".$micropayCallResult['is_subscribe']."<br>"; echo "交易類型:".$micropayCallResult['trade_type']."<br>"; echo "付款銀行:".$micropayCallResult['bank_type']."<br>"; echo "總金額:".$micropayCallResult['total_fee']."<br>"; echo "現(xiàn)金券金額:".$micropayCallResult['coupon_fee']."<br>"; echo "貨幣種類:".$micropayCallResult['fee_type']."<br>"; echo "微信支付訂單號:".$micropayCallResult['transaction_id']."<br>"; echo "商戶訂單號:".$micropayCallResult['out_trade_no']."<br>"; echo "商家數(shù)據(jù)包:".$micropayCallResult['attach']."<br>"; echo "支付完成時間:".$micropayCallResult['time_end']."<br>"; } } else { $this->assign('out_trade_no',$out_trade_no); $this->display(); } } //發(fā)送現(xiàn)金紅包 public function sendRedpack() { //全局引入微信支付類 Vendor('Wxpay.WxPayPubHelper.WxPayPubHelper'); //調用請求接口基類 $Redpack = new \Redpack_pub(); //=========步驟1:網(wǎng)頁授權獲取用戶openid============ //通過code獲得openid if (!isset($_GET['code'])) { //觸發(fā)微信返回code碼 //$reduct_uri = WEB_HOST."/index.php/Home/WxCashRedPack/sendRedpack"; $url = $Redpack->createOauthUrlForCode($this->fromurl); Header("Location: $url"); }else { //獲取code碼,以獲取openid $code = $_GET['code']; $Redpack->setCode($code); $openid = $Redpack->getOpenId(); } //商戶訂單號 $Redpack->setParameter('mch_billno', \WxPayConf_pub::APPID."static"); //提供方名稱 $Redpack->setParameter('nick_name', "江蘇七八九"); //商戶名稱 $Redpack->setParameter('send_name', "江蘇七八九"); //用戶openid // $Redpack->setParameter('re_openid', $parameterValue); //付款金額 $Redpack->setParameter('total_amount', 100); //最小紅包金額 $Redpack->setParameter('min_value', 100); //最大紅包金額 $Redpack->setParameter('max_value', 100); //紅包發(fā)放總人數(shù) $Redpack->setParameter('total_num', 1); //紅包祝福語 $Redpack->setParameter('wishing', "現(xiàn)金紅包教程祝大家寫代碼快樂"); //活動名稱 $Redpack->setParameter('act_name', "現(xiàn)金紅包教程"); //備注 $Redpack->setParameter('remark', "現(xiàn)金紅包教程祝大家寫代碼快樂"); //以下是非必填項目 //子商戶號 // $Redpack->setParameter('sub_mch_id', $parameterValue); // //商戶logo的url // $Redpack->setParameter('logo_imgurl', $parameterValue); // //分享文案 // $Redpack->setParameter('share_content', $parameterValue); // //分享鏈接 // $Redpack->setParameter('share_url', $parameterValue); // //分享的圖片 // $Redpack->setParameter('share_imgurl', $parameterValue); $result = $Redpack->sendRedpack(); dump($result); } //發(fā)送裂變紅包 public function sendRedpacks() { //全局引入微信支付類 Vendor('Wxpay.WxPayPubHelper.WxPayPubHelper'); //調用請求接口基類 $Redpack = new \Groupredpack_pub(); //=========步驟1:網(wǎng)頁授權獲取用戶openid============ //通過code獲得openid if (!isset($_GET['code'])) { //觸發(fā)微信返回code碼 //$reduct_uri = WEB_HOST."/index.php/Home/WxGroupRedPack/sendRedpack"; $url = $Redpack->createOauthUrlForCode($this->fromurl); Header("Location: $url"); }else { //獲取code碼,以獲取openid $code = $_GET['code']; $Redpack->setCode($code); $openid = $Redpack->getOpenId(); } //商戶訂單號 $timeStamp = time(); $Redpack->setParameter('mch_billno', \WxPayConf_pub::APPID.$timeStamp); //商戶名稱 $Redpack->setParameter('send_name', "gaoyl101"); //接受紅包的種子用戶 //$Redpack->setParameter('re_openid', $parameterValue); //付款金額 $Redpack->setParameter('total_amount', 300); //紅包發(fā)放總人數(shù) $Redpack->setParameter('total_num', 3); $Redpack->setParameter('amt_type','ALL_RAND'); //紅包祝福語 $Redpack->setParameter('wishing', "現(xiàn)金紅包教程祝大家寫代碼快樂"); //活動名稱 $Redpack->setParameter('act_name', "現(xiàn)金紅包教程"); //備注 $Redpack->setParameter('remark', "現(xiàn)金紅包教程祝大家寫代碼快樂"); //以下是非必填項目 //子商戶號 // $Redpack->setParameter('sub_mch_id', $parameterValue); // //商戶logo的url // $Redpack->setParameter('amt_list', '200|100|100'); $result = $Redpack->sendRedpack(); dump($result); } }
代碼片段和文件信息
//?+----------------------------------------------------------------------
//?|?ThinkPHP?[?WE?CAN?DO?IT?JUST?THINK?]
//?+----------------------------------------------------------------------
//?|?Copyright?(c)?2006-2014?http://thinkphp.cn?All?rights?reserved.
//?+----------------------------------------------------------------------
//?|?Licensed?(?http://www.apache.org/licenses/LICENSE-2.0?)
//?+----------------------------------------------------------------------
//?|?Author:?liu21st?
//?+----------------------------------------------------------------------
//?應用入口文件
//?檢測PHP環(huán)境
if(version_compare(PHP_VERSION‘5.3.0‘‘<‘))??die(‘require?PHP?>?5.3.0?!‘);
//?開啟調試模式?建議開發(fā)階段開啟?部署階段注釋或者設為false
define(‘APP_DEBUG‘True);
//?定義應用目錄
define(‘APP_PATH‘
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2015-07-10?09:35??Application\
?????目錄???????????0??2015-07-10?09:35??Application\Common\
?????目錄???????????0??2015-07-10?10:38??Application\Common\Common\
?????文件?????????228??2015-07-10?10:38??Application\Common\Common\function.php
?????文件???????????1??2015-07-10?09:35??Application\Common\Common\index.html
?????目錄???????????0??2015-07-10?09:35??Application\Common\Conf\
?????文件??????????50??2015-07-10?09:35??Application\Common\Conf\config.php
?????文件???????????1??2015-07-10?09:35??Application\Common\Conf\index.html
?????文件???????????1??2015-07-10?09:35??Application\Common\index.html
?????目錄???????????0??2015-07-10?09:35??Application\Home\
?????目錄???????????0??2015-07-10?09:35??Application\Home\Common\
?????文件???????????1??2015-07-10?09:35??Application\Home\Common\index.html
?????目錄???????????0??2015-07-10?09:35??Application\Home\Conf\
?????文件??????????50??2015-07-10?09:35??Application\Home\Conf\config.php
?????文件???????????1??2015-07-10?09:35??Application\Home\Conf\index.html
?????目錄???????????0??2015-07-10?10:36??Application\Home\Controller\
?????文件???????????1??2015-07-10?09:35??Application\Home\Controller\index.html
?????文件?????????823??2015-07-10?09:35??Application\Home\Controller\IndexController.class.php
?????文件???????21899??2015-07-10?16:38??Application\Home\Controller\WxpayController.class.php
?????文件???????????1??2015-07-10?09:35??Application\Home\index.html
?????目錄???????????0??2015-07-10?09:35??Application\Home\Model\
?????文件???????????1??2015-07-10?09:35??Application\Home\Model\index.html
?????目錄???????????0??2015-07-10?10:40??Application\Home\View\
?????文件???????????1??2015-07-10?09:35??Application\Home\View\index.html
?????目錄???????????0??2015-07-10?13:56??Application\Home\View\Wxpay\
?????文件????????1561??2015-07-10?13:56??Application\Home\View\Wxpay\micropay.html
?????文件?????????802??2015-07-10?13:23??Application\Home\View\Wxpay\native_pay.html
?????文件????????1760??2015-07-10?14:03??Application\Home\View\Wxpay\native_pays.html
?????文件????????1291??2015-07-10?11:36??Application\Home\View\Wxpay\new_pay.html
?????文件???????????1??2015-01-28?15:46??Application\index.html
?????文件??????????15??2015-01-28?15:46??Application\README.md
............此處省略451個文件信息
評論
共有 條評論