1.微信配置就不多說了,看文檔。
2.我用的是phalcon框架寫的。。
在微信支付控制器中引入微信的配置文件
require_once "wxpay/lib/WxPay.Data.php";
require_once "wxpay/example/WxPay.NativePay.php";
require_once "wxpay/lib/WxPay.Api.php";
1)先創建本地訂單(一般訂單號爲 date("YmdHis").rand(10000,99999))並存入訂單數據表 支付狀態爲0不成功
2)
$notify = new \NativePay();
$input = new \WxPayUnifiedOrder();
$input->SetBody("測試充值");
$input->SetAttach("測試充值");
$input->SetOut_trade_no($out_trade_no);//$out_trade_no爲本地生成的訂單號
$input->SetTotal_fee($balance);//$balance 爲用戶輸入或選擇的金額(別忘了*100)
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetNotify_url("http://www.xxx.com/recharge/wxNotify");
$input->SetTrade_type("NATIVE");
$input->SetProduct_id("123456789");
$result = $notify->GetPayUrl($input);
$url = $result["code_url"];//這個就是二維碼地址
//下面是 輸入變量到模板
$this->view->setVar('uid', $userId);
$this->view->setVar('url', $url);
$this->view->setVar('out_trade_no', $out_trade_no);
$this->view->setVar('payment', $post['repayment']);
3)二維碼圖片顯示
<img class="QRpay-code" src="http://www.xxx.com/wxpay/example/qrcode.php?data={{ url }}" />
4)回調http://www.xxx.com/recharge/wxNotify
// 微信支付回調(如果不是在一個控制器裏面不要忘了 引入微信文件)
public function wxNotifyAction() {
$postXml = $GLOBALS["HTTP_RAW_POST_DATA"];//微信回調返回值
$payResu = new \WxPayResults();
$postArr = $payResu->FromXml($postXml);//微信demo 自帶的 xml->array
//微信訂單驗證
$input = new \WxPayOrderQuery();
$input->SetTransaction_id($postArr['transaction_id']);
$wxpayapi = new \WxPayApi();
$result = $wxpayapi::orderQuery($input);
if(array_key_exists("return_code", $result)&& array_key_exists("result_code", $result)&& $result["return_code"] == "SUCCESS" && $result["result_code"] == "SUCCESS")
{
//更新order_number充值訂單
$out_trade_no = $postArr['out_trade_no'];
$json = json_encode($postArr);
$order_num = OrderNum::findFirst("order_num = $out_trade_no");
$order_num->callback_data = $json; //把微信返回的數據以json的形式存儲到callback_data字段
$order_num->status = 1;
if ($order_num->save() == false){
return false;
}
}
5)充值完成跳轉功能,在二維碼展示界面用ajax不斷髮送請求檢查
<script>
setInterval(function(){ call() }, 3000);
function call(){
$.ajax({
url:"/order/notify",
type:'post',
data:{ 'uid':"{{ uid }}", 'out_trade_no':"{{out_trade_no}}", 'payment':"{{ payment }}" },
success:function(data){
if(data == 1){
window.location = "http://www.xxx.com/gamepay/success";
}
}
});
}
</script>
6)order/notify文件
// 微信支付成功處理
public function notifyAction() {
$this->view->disable();
$post = $this->request->get();
$this->request->get();
$userId = $post['uid'];
$payment = $post['payment'];
$out_trade_no = $post['out_trade_no'];
if($this->request->isAjax()){
$order_number = OrderNum::findFirst("order_num = $out_trade_no");
$call = $order_number->callback_data;
$callBack = json_decode($call, true);
$balance = $callBack['total_fee'];
$order_status = $order_number->status;
//判斷
if($out_trade_no == $callBack['out_trade_no'] && $order_status== '1'){
$cm = new CurlManager();
// 判斷是否存在用戶信息
$userInfo = $cm->getUserInfo($userId);
if (!$userInfo) {
//創建用戶
}
// 充值
if($userInfo){
//更新用戶餘額
if($updateBlance){
echo 1;
}
}
}
}
}