微信支付 - 一个完整的微信支付流程

一个完整的支付流程包括:1、创建订单;2、创建微信支付参数,调用微信支付API;3、完成支付,更新订单状态3个流程。

微信支付 - 1、创建订单

我们构造一个订单数组$order,用来模拟订单的创建。在实际应用中,$order数组的值都是根据用户表单获取的。

<?php

$order=array();

//以下红色字体部分是调起微信支付必须的参数 参见 https://wiki.phpwechat.com/58

$order['out_trade_no']=Order::createOutTradeNo(); // 订单号

$order['num']=1; // 订单数量

$order['total_fee']=99.99; //订单总价

$order['body']='产品描述'; //订单描述


//以下灰色字体部分是调起微信支付可选的参数 参见 https://wiki.phpwechat.com/58

$order['product_id']=1; //产品ID

$order['time_start']=date("YmdHis"); //订单创建时间

$order['time_expire']=date("YmdHis", time() + 600); //订单失效时间


//以下蓝色字体部分是 phpWeChat 订单表必须的参数

$order['createtime']=1434567890; //下单时间 Linux时间戳

$order['mod']='weshop'; //订单创建模块

$order['action']='goods'; //订单创建操作

$order['userid']=1; // 订单创建用户ID

?>

在以上代码片段中,我们创建了一个订单数组。我们用 Order类的  createOrder() 方法,来创建订单:

<?php

Order::createOrder($order);

?>

此时,我们便在订单表插入了一条未支付的订单记录,接下来,我们生成微信支付必须的参数:

<?php

$paypara=Wepay::getWePayParameters($order);

?>

$paypara将返回微信支付所需的相关参数。

微信支付 - 2、创建微信支付参数,调用微信支付API

在第一步,我们完成了订单创建、微信支付参数的生成。我们接下来在微信H5页面中发起微信支付。

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8" />

    <title>phpWeChat 微信支付示例</title>

    <script language="javascript" type="text/javascript">

function jsApiCall()

{

WeixinJSBridge.invoke(

'getBrandWCPayRequest',

{$paypara['jsApiParameters']},  //此处调用了上一步生成的微信支付参数

function(res){

WeixinJSBridge.log(res.err_msg);

if(res.err_msg == "get_brand_wcpay_request:ok")

{

window.location.href="{format_url(U(MOD,'order'))}";

}

else

{

alert('支付失败('+res.err_msg+'),请重新支付!');

}

}

);

}


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>

<a href="javascript:void(0);"1>

</body>

</html>

在此H5页面中,点击 立即付款 即可调起微信支付的窗口。

微信支付 - 3、完成支付,更新订单状态

在第2步完成支付并支付成功后,我们需要修改订单状态或进行其他逻辑操作(如:修改用户表进行用户充值等,修改商品库存数量等)。这些逻辑的代码在哪里实现呢?

phpWeChat 封装了整个微信支付的操作逻辑,您只需要在发起该微信支付的功能模块的模型类里定义一个方法即可。

比如上述订单我们是由 weshop(微商城)功能模块的goods(商品购买)操作发起的,那么我们需要在 weshop/include/weshop.class.php 里定义以下的方法 goodsPaySuccess()

<?php

public static function goodsPaySuccess($out_trade_no='')

{

return self::setOrder(array('status'=>1),$out_trade_no); //修改订单状态为已支付 当然你可以进行其他逻辑操作,如修改用户表进行用户余额更改等

}

?>

请注意该方法的命名规则。

您只需定义好这个方法,phpWeChat 就会自动在支付成功后调用这个方法。这一切都是自动的。


经过以上3个步骤,一个微信支付的流程结束了。

最后更新:2016-06-14