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;
}
}
}
}
}