php微信支付全記錄

1.調(diào)用前準(zhǔn)備

1)查看商戶平臺(tái) appid,key,secret,mchid(商戶號(hào));

獲取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN

2)在商戶平臺(tái)將前臺(tái)調(diào)用微信支付的頁面地址加入商戶平臺(tái)中(否則報(bào)url未注冊(cè)錯(cuò)誤)

? ? 如http://www.baidu.com/test/demo.html

? ? 則要將http://www.baidu.com/test/ ?加入到商戶平臺(tái)后臺(tái)url注冊(cè)中

3)下載商戶平臺(tái)支付證書,在api證書下載中下載

? ? 登錄微信支付商戶平臺(tái),點(diǎn)擊【賬戶中心】->【賬戶設(shè)置】->【API安全】->【下載證書】中,下載及設(shè)置;

? ? 除了apiclient_cert.p12,apiclient_cert.pem,apiclient_key.pem,還有rootca.pem要加入證書中

4)引入官方方法文件



大致目錄結(jié)構(gòu)為:


2.配置WxPay.Config.php



/**


*? 配置賬號(hào)信息


*/


class WxPayConfig


{


? //=======【基本信息設(shè)置】=====================================


//


/**


? ? * TODO: 修改這里配置為您自己申請(qǐng)的商戶信息


? ? * 微信公眾號(hào)信息配置


*


* APPID:綁定支付的APPID(必須配置,開戶郵件中可查看)


*


* MCHID:商戶號(hào)(必須配置,開戶郵件中可查看)


*


* KEY:商戶支付密鑰,參考開戶郵件設(shè)置(必須配置,登錄商戶平臺(tái)自行設(shè)置)


* 設(shè)置地址:https://pay.weixin.qq.com/index.php/account/api_cert


*


* APPSECRET:公眾帳號(hào)secert(僅JSAPI支付的時(shí)候需要配置, 登錄公眾平臺(tái),進(jìn)入開發(fā)者中心可設(shè)置),


* 獲取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN


? ? * @var string


*/


? const APPID = appid;


? const MCHID = mchid;


? const KEY = key;


? const APPSECRET = secret;


? //=======【證書路徑設(shè)置】=====================================


/**


? ? * TODO:設(shè)置商戶證書路徑


? ? * 證書路徑,注意應(yīng)該填寫絕對(duì)路徑(僅退款、撤銷訂單時(shí)需要,可登錄商戶平臺(tái)下載,


* API證書下載地址:https://pay.weixin.qq.com/index.php/account/api_cert,下載之前需要安裝商戶操作證書)


? ? * @var path


*/


? const SSLCERT_PATH = '../cert/apiclient_cert.pem';


? const SSLKEY_PATH = '../cert/apiclient_key.pem';


? //=======【curl代理設(shè)置】===================================


/**


? ? * TODO:這里設(shè)置代理機(jī)器,只有需要代理的時(shí)候才設(shè)置,不需要代理,請(qǐng)?jiān)O(shè)置為0.0.0.0和0


? ? * 本例程通過curl使用HTTP POST方法,此處可修改代理服務(wù)器,


* 默認(rèn)CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此時(shí)不開啟代理(如有需要才設(shè)置)


? ? * @var unknown_type


*/


? const CURL_PROXY_HOST = "0.0.0.0";//"10.152.18.220";


? const CURL_PROXY_PORT = 0;//8080;


//=======【上報(bào)信息配置】===================================


/**


? ? * TODO:接口調(diào)用上報(bào)等級(jí),默認(rèn)緊錯(cuò)誤上報(bào)(注意:上報(bào)超時(shí)間為【1s】,上報(bào)無論成敗【永不拋出異?!浚?/p>


? ? * 不會(huì)影響接口調(diào)用流程),開啟上報(bào)之后,方便微信監(jiān)控請(qǐng)求調(diào)用的質(zhì)量,建議至少


* 開啟錯(cuò)誤上報(bào)。


* 上報(bào)等級(jí),0.關(guān)閉上報(bào); 1.僅錯(cuò)誤出錯(cuò)上報(bào); 2.全量上報(bào)


? ? * @var int


*/


? const REPORT_LEVENL = 1;


}


3.示例代碼


//支付方式


$payData['user_id']=$_SESSION['uid'];//用戶id 此處保存在session中,其他自取


//0余額 1微信公眾號(hào) 2微信app 3支付寶app


$payData['type']=1;


//0:消費(fèi) 1:充值


$payData["plus_minus"] = 0;


$payData["sum"] = (金額);


$payData["order_type"] = $_REQUEST['order_type'];//支付狀態(tài)


$payData["order_id"] = $id;


$payData["order_num"] = time() . rand(100, 1000);//支付訂單號(hào),隨機(jī)生成


if ($_REQUEST['order_type'] == 1) {


? ? $payData["detail"] = "活動(dòng)報(bào)名充值";


} else if ($_REQUEST['order_type'] == 2) {


? ? $payData["detail"] = "余額充值";


}


//0:未支付 1:已支付


$payData['status']=0;


vendor('WeiXinPay.JSAPI');//此處為官方接口文件目錄引用方法


$tools = new JsApiPay();


//$openid = $tools->GetOpenid();


$openid = $userinfo["openid"];//獲取用戶openid 自取


$Out_trade_no = $payData["order_num"];


$Body = 'incubator';


$Total_fee = $_REQUEST['charge']*100; //1=0.01元 所以*100


//次數(shù)order_type 表示支付狀態(tài) 如果為1 則添加數(shù)據(jù)庫操作


if($_REQUEST['order_type'] == 1){


//....將支付數(shù)據(jù)信息(如活動(dòng)報(bào)名成功信息)加入數(shù)據(jù)庫


}else{


? ? ? ? ?$input = new WxPayUnifiedOrder();


? ? ? ? ? ? ? $input->SetBody($Body);


? ? ? ? ? ? ? $input->SetAttach("test");


? ? ? ? ? ? ? $input->SetOut_trade_no($Out_trade_no);


//? ? ? ? $input->SetOut_trade_no(WxPayConfig::MCHID . date("YmdHis"));


? ? ? ? ? ? ? $input->SetTotal_fee($Total_fee);


? ? ? ? ? ? ? $input->SetTime_start(date("YmdHis"));


? ? ? ? ? ? ? $input->SetTime_expire(date("YmdHis", time() + 600));




//發(fā)送Notify


$input->SetNotify_url("http://yf.haoapp123.com/fuhuaqi2/api.php/incubator/wechatPayNotify");


? ? ? ? ? ? ? $input->SetTrade_type("JSAPI");


? ? ? ? ? ? ? $input->SetOpenid($openid);


? ? ? ? ? ? ? //? ? ? ? $order = WxPayApi::unifiedOrder($input);


//動(dòng)態(tài)獲取方法


// ?$incubatorInfo = M('regcode')->where("enc_code='".$_REQUEST['bm']."'")->find();


//? ? ? ? ? ? $bm=$_REQUEST['bm'];


?// ? ? ? ? ? ?$appid=$incubatorInfo['appid'];


?// ? ? ? ? ? ?$mchid=$incubatorInfo['mchid'];


?// ? ? ? ? ? ?$order = WxPayApi::unifiedOrder($input,$appid,$mchid);//如要?jiǎng)討B(tài)獲取則需修改?WxPayApi方法使其多加兩個(gè)參數(shù)appid,mchid


//一般將appid,mchid配置在配置文件中,WxPayApi會(huì)自動(dòng)加載配置文件中的appid和mchid


?$order = WxPayApi::unifiedOrder($input);


//? ? dump($order['prepay_id']);


? ? ? ? ? ? //獲取返回值,輸出到前臺(tái)的data


? ? ? ? ? ? ? $res = $tools->GetJsApiParameters($order);


? ? ? ? ? ? ? $result["data"] = json_decode($res);


? ? ? ? ? ? ? $result["order_num"] = $Out_trade_no;


// 根據(jù)上行取得的支付參數(shù)請(qǐng)求支付即可


//? ? ? ? dump($data);


? ? ? ? ? ? ? $payData["prepay_id"] = $order['prepay_id'];


? ? ? ? ? ? ? $payData['create_time'] = date("Y-m-d H:i:s");


? ? ? ? ? ? ? M('user_balance_pay')->add($payData);//user_balance_pay表為用戶信息表儲(chǔ)存要保存的信息


? ? ? ? ? ? ? $result['result'] = '1';


? ? ? ? ? ? ? $result['result_text'] = 'success';


//? ? ? ? ? ? $result['bm']=$bm;


? ? ? ? ? ? ? echo json_encode($result);


? ? ? ? ? ? ? return;


}


wechatPayNotify ?


function wechatPayNotify()


{


? ? ? ? $xml = $GLOBALS['HTTP_RAW_POST_DATA'];


? ? ? ? if (!empty($xml)) {


? ? ? ? ? ? $json = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)));


? ? ? ? ? ? $order_number = $json->out_trade_no;


? ? ? ? ? ? //? ? ? ? $data["prepay_id"] = $order_number;


//? ? ? ? M('user_balance_pay')->add($data);


? ? ? ? ? ? $appPay = M('user_balance_pay')->where('type = 1 and order_num = ' . $order_number)->find();


? ? ? ? ? ? if (!empty($appPay)) {


? ? ? ? ? ? ? ? $appPay["status"] = 1;


? ? ? ? ? ? ? ? $appPay['update_time'] = date("Y-m-d H:i:s");


? ? ? ? ? ? ? ? //修改用戶支付狀態(tài)


? ? ? ? ? ? ? ? M('user_balance_pay')->save($appPay);


? ? ? ? ? ? ? ? if ($appPay["order_type"] == 1) {


? ? ? ? ? ? ? ? ? ? $this->payResultToGetMeetingroomKey($appPay["order_id"]);


? ? ? ? ? ? ? ? ? ? $theOrder = M('view_mroom_apply')->where('id=' . $appPay["order_id"])->find();


? ? ? ? ? ? ? ? ? ? $this->sendMessage($theOrder["openid"],


? ? ? ? ? ? ? ? ? ? ? ? $theOrder["roomnumber"],


? ? ? ? ? ? ? ? ? ? ? ? substr($theOrder["start_time"], 0, 16) . "-" . substr($theOrder["end_time"], 11, 5),


? ? ? ? ? ? ? ? ? ? ? ? $theOrder["enterprise_name"],


? ? ? ? ? ? ? ? ? ? ? ? $theOrder["name"],


? ? ? ? ? ? ? ? ? ? ? ? $theOrder["mobile"]);


}


}


? ? ? ? ? ? $data["result"] = "1";


? ? ? ? ? ? $data["result_text"] = "success";


//? ? ? ? ? ? echo json_encode($data);


? ? ? ? ? ? echo "";


? ? ? ? ? ? return;


? ? ? ? }else {


? ? ? ? ? ? $data["result"] = "0";


? ? ? ? ? ? $data["result_text"] = "fail";


//? ? ? ? ? ? echo json_encode($data);


? ? ? ? ? ? return;


}


? ? }


4.常遇錯(cuò)誤

1.url未注冊(cè)

未將發(fā)起微信支付頁面加入商戶平臺(tái)url注冊(cè)中

2.appid參數(shù)異常

(1)WxPay.Config.php中appid設(shè)置錯(cuò)誤,或key錯(cuò)誤

(2)雖然微信支付并沒有涉及key的操作,但是appid需要key進(jìn)行解析,所以配置文件中四個(gè)參數(shù)必須都填上

(3)證書錯(cuò)誤,重新下載

(4)WxPay.Config.php引用證書路徑錯(cuò)誤

5.其他

暫無..待改進(jìn)

1.存儲(chǔ)用戶支付信息目錄(僅作參看)

2..給公眾號(hào)用戶推送模版消息需要服務(wù)器ip加入公眾號(hào)請(qǐng)求白名單,不知道對(duì)微信公眾號(hào)支付有沒有影響,暫議.


? ? ? ? ? ? ? SDK下載地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于微信支付 生活中的微信支付 目前我們?nèi)粘I钪薪佑|得比較多的線上電子支付方式主要有兩種,一種是支付寶,另一種就...
    積_漸閱讀 4,018評(píng)論 3 26
  • 引言 秋高氣爽,天氣轉(zhuǎn)涼,正是學(xué)習(xí)工作做的好時(shí)候。(~ ̄▽ ̄)~~(~ ̄▽ ̄)~ 我是個(gè)phper最近在寫微信支付...
    恩就是這個(gè)名閱讀 8,227評(píng)論 2 15
  • 該文僅對(duì)于中間這種支付方式有參考價(jià)值喲 一、開發(fā)背景 在微信公眾號(hào)中,需要進(jìn)行微信支付且為微信公眾號(hào)網(wǎng)頁支付。 二...
    英文名叫夏天閱讀 2,009評(píng)論 0 7
  • 錄宋詞十首
    秋日私語書箋閱讀 338評(píng)論 7 5
  • 我們家開家小小壽司店,已經(jīng)營業(yè)兩年多了,生意一直不溫不火,但是我始終堅(jiān)信,我們會(huì)做得有聲有色的!因?yàn)槲覀儽行拍睿?..
    Mine豆閱讀 411評(píng)論 0 0

友情鏈接更多精彩內(nèi)容