微信--訂單處理頁:
<?php
include("WxPayPubHelper.php");
//使用jsapi接口
$jsApi = new JsApi_pub();
//=========步驟1:網頁授權獲取用戶openid============
//通過code獲得openid
if (!isset($_GET['code']))
{
//觸發微信返回code碼
$url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
ecs_header("Location: $url");
}else
{
//獲取code碼,以獲取openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId();
if(!empty($openid))
{
goto獲取到相應的訂單參數
}
//=========步驟2:使用統一支付接口,獲取prepay_id============
//使用統一支付接口
$unifiedOrder = new UnifiedOrder_pub();
//設置統一支付接口參數
//設置必填參數
//appid已填,商戶無需重復填寫
//mch_id已填,商戶無需重復填寫
//noncestr已填,商戶無需重復填寫
//spbill_create_ip已填,商戶無需重復填寫
//sign已填,商戶無需重復填寫
$unifiedOrder->setParameter("openid","$openid");//商品描述
$out_trade_no = $order['order_sn'];
$unifiedOrder->setParameter("body","$goods_name");//商品描述
//自定義訂單號,此處僅作舉例
//$timeStamp = time();
//$out_trade_no = WxPayConf_pub::APPID."$timeStamp";
$total_fee = $total['amount']*100;
$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商戶訂單號
$unifiedOrder->setParameter("total_fee","$total_fee");//總金額
$unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址
$unifiedOrder->setParameter("trade_type","JSAPI");//交易類型
//非必填參數,商戶可根據實際情況選填
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商戶號
//$unifiedOrder->setParameter("device_info","XXXX");//設備號
//$unifiedOrder->setParameter("attach","XXXX");//附加數據
//$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();
//$jsApiParameters = json_encode($jsApiParameters);
$smarty->assign('pay_online', $jsApiParameters);
$smarty->assign('openid',$openid);
$smarty->assign('order_id',$order_id);//訂單id用於支付成功跳轉訂單頁
$smarty->display('order_done.dwt');
//echo $jsApiParameters;
}
?>
微信支付頁:請注意標紅處。此處為支付成功后跳轉
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>微信安全支付</title>
<script type="text/javascript">
//調用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
{$pay_online},
function(res){
WeixinJSBridge.log(res.err_msg);
if(res.err_msg == "get_brand_wcpay_request:ok"){
//alert(res.err_code+res.err_desc+res.err_msg);
window.location.href="http://xxxxxx";
}else{
//返回跳轉到訂單詳情頁面
alert(支付失敗);
window.location.href="http://xxxxx/index.php?wxid={$openid}";
}
}
);
}
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{
jsApiCall();
}
}
</script>
</head>
<body>
</br></br></br></br>
<div align="center">
<button style="width:610px; height:160px; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:64px;" type="button" onclick="callpay()" >給我一分錢</button>
</div>
</body>
</html>
異步處理頁:必須echo success
<?php
//使用log文件形式記錄回調信息。
include("log_.php");
include("WxPayPubHelper.php");
//使用通用通知接口
$notify = new Notify_pub();
//存儲微信的回調
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
$notify->saveData($xml);
//驗證簽名,並回應微信。
//對后台通知交互時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗,
//微信會通過一定的策略(如30分鍾共8次)定期重新發起通知,
//盡可能提高通知的成功率,但微信不保證通知最終能成功。
if($notify->checkSign() == FALSE){
$notify->setReturnParameter("return_code","FAIL");//返回狀態碼
$notify->setReturnParameter("return_msg","簽名失敗");//返回信息
}else{
$notify->setReturnParameter("return_code","SUCCESS");//設置返回碼
}
$returnXml = $notify->returnXml();
echo $returnXml;
//==商戶根據實際情況設置相應的處理流程,此處僅作舉例=======
//以log文件形式記錄回調信息
$log_ = new Log_();
$log_name="./notify_url.log";//log文件路徑
$log_->log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");
if($notify->checkSign() == TRUE)
{
//進行訂單處理:
//商戶自行增加處理流程,
//例如:更新訂單狀態
//例如:數據庫操作
//例如:推送支付完成信息
}
$fp = fopen('./a.txt', 'a+b');
fwrite($fp, var_export($xml, true));
fclose($fp);
?>