使用步驟:
1.導(dǎo)入下載好的微信V3版本SDK
public function __construct()
{
parent::__construct();
//引入微信支付
Vendor('WxpayV3.WxPayPubHelper');
}
2.獲取OPenid和統(tǒng)一下單,廢話不說直接上代碼:
$tools = new \JsApiPay();
$openId = $tools->GetOpenid();
$input = new \WxPayUnifiedOrder();
$input->SetBody('測試支付'); //商品名稱
$input->SetAttach("");
$input->SetOut_trade_no('寫入你的訂單號'); //訂單號
$input->SetTotal_fee(100); //訂單總金額為整數(shù)
$input->SetTime_start(date("YmdHis")); //訂單生成時間
$input->SetTime_expire(date("YmdHis", time() + 600));//訂單失效時間
$input->SetGoods_tag('');//設(shè)置商品標(biāo)記,代金券或立減優(yōu)惠功能的參數(shù)市咆,說明詳見代金券或立減優(yōu)惠
$input->SetNotify_url($_SERVER['SERVER_NAME']."/index.php/Home/Pay/notify");//異步通知地址
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = \WxPayApi::unifiedOrder($input);
$jsApiParameters = $tools->GetJsApiParameters($order);
3.頁面部分使用代碼
//引入微信JS
<script src="__JS__/layer/layer.js" type="text/javascript" charset="UTF-8"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
//把后臺返回的參數(shù)寫入
<script>
//調(diào)用微信JS api 支付
function callpay(){
if(typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall,false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters;?>,
function(res){
if(res.err_msg =='get_brand_wcpay_request:ok'){
layer.msg('支付成功');
setTimeout(function(){
window.location = go_buy_login;
},3000);
}else{
layer.msg('支付失敗');
setTimeout(function(){
window.location = go_buy_login;
},3000);
}
}
);
}
}
</script>
4.支付回調(diào)異步通知
//支付通知回調(diào)
Public function notify()
{
//這里沒有去做回調(diào)的判斷汉操,可以參考手機(jī)做一個判斷。
$xmlObj = simplexml_load_string(file_get_contents("php://input"));
//$xmlObj = simplexml_load_string($GLOBALS['HTTP_RAW_POST_DATA']); //解析回調(diào)數(shù)據(jù)
$appid = $xmlObj->appid;//微信appid
$mch_id = $xmlObj->mch_id; //商戶號
$nonce_str = $xmlObj->nonce_str;//隨機(jī)字符串
$sign = $xmlObj->sign;//簽名
$result_code = $xmlObj->result_code;//業(yè)務(wù)結(jié)果
$openid = $xmlObj->openid;//用戶標(biāo)識
$is_subscribe = $xmlObj->is_subscribe;//是否關(guān)注公眾帳號
$trace_type = $xmlObj->trade_type;//交易類型蒙兰,JSAPI,NATIVE,APP
$bank_type = $xmlObj->bank_type;//付款銀行磷瘤,銀行類型采用字符串類型的銀行標(biāo)識。
$total_fee = $xmlObj->total_fee;//訂單總金額搜变,單位為分
$fee_type = $xmlObj->fee_type;//貨幣類型采缚,符合ISO4217的標(biāo)準(zhǔn)三位字母代碼,默認(rèn)為人民幣:CNY挠他。
$transaction_id = $xmlObj->transaction_id;//微信支付訂單號
$out_trade_no = $xmlObj->out_trade_no;//商戶訂單號
$attach = $xmlObj->attach;//商家數(shù)據(jù)包扳抽,原樣返回
$time_end = $xmlObj->time_end;//支付完成時間
$cash_fee = $xmlObj->cash_fee;
$return_code = $xmlObj->return_code;
if($return_code =="SUCCESS"){
//如果沒有做過處理,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細(xì)殖侵,并執(zhí)行商戶的業(yè)務(wù)程序
echo success;
}
//下面開始你可以把回調(diào)的數(shù)據(jù)存入數(shù)據(jù)庫贸呢,或者和你的支付前生成的訂單進(jìn)行對應(yīng)了。
//需要記住一點(diǎn)拢军,就是最后在輸出一個success.要不然微信會一直發(fā)送回調(diào)包的楞陷,只有需出了succcess微信才確認(rèn)已接收到信息不會再發(fā)包.
}
二.APP微信支付V3使用(SDK及異步同上)
//統(tǒng)一下單
$input = new \WxPayUnifiedOrder();
$input->SetBody('APP測試'); //商品名稱
$input->SetAttach("");
$input->SetOut_trade_no('12345678910112255'); //訂單號
$input->SetTotal_fee(100); //訂單總金額
$input->SetTime_start(date("YmdHis")); //訂單生成時間
$input->SetTime_expire(date("YmdHis", time() + 600)); //訂單失效時間
$input->SetGoods_tag(''); //設(shè)置商品標(biāo)記,代金券或立減優(yōu)惠功能的參數(shù)茉唉,說明詳見代金券或立減優(yōu)惠
$input->SetNotify_url($_SERVER['SERVER_NAME'] . "/index.php/Home/Pay/wxnotify");//異步通知地址
$input->SetTrade_type("APP"); //下單類型
$order_data = \WxPayApi::unifiedOrder($input);
$order_data['timestamp'] = time();
$str = 'appid='.$order_data['appid'].'&noncestr='.$order_data['nonce_str'].'&package=Sign=WXPay&partnerid='. \WxPayConfig::MCHID.'&prepayid='.$order_data['prepay_id'].'×tamp='.$order_data['timestamp'];
//重新生成簽名
$order_data['sign']=strtoupper(md5($str.'&key='. \WxPayConfig::KEY));
echo json_encode($order_data);