支付宝屎一般的支付 API 相信让大家受了不少折磨,在 WordPress 中使用支付宝接口实现支付宝支付更是麻烦,具体怎么难用就不多说了,使用过的朋友自然深有体会。在 PHP 世界里,有一个叫 Omnipay 的支付处理库,该库做了一件好事,就是把各种支付平台乱七八糟的支付网关给统一化了,这样一来,我们只需要学习一种支付接口,就可以在 WordPress 中实现各种支付网关的接入,前提是 Omnipay 得支持这种网关。感谢 “Loki Else” 大神为 Omnipay 添加了支付宝支持,这就是我们今天要介绍的 Omnipay-Alipay。
第一步:安装配置 Omnipay-Alipay
首先,直接通过 Composer 安装:
composer require omnipay-alipay
然后,加载 autoload.php,配置支付宝帐号。
// 加载 composer 安装的库 require_once( dirname( __FILE__ ) . '/../vendor/autoload.php' ); use Omnipay\Omnipay; // 创建调用支付宝支付网关的函数,以便在其他文件中调用 function get_gate_way(){ $gateway = Omnipay::create( 'Alipay_Express' ); $gateway->setPartner( '*******' ); //支付宝 PID $gateway->setKey( '*****************' ); //支付宝 Key $gateway->setSellerEmail( 'admin@example.com' ); //收款账户 email $gateway->setReturnUrl( 'https://www.wpzhiku.com/order_return' ); $gateway->setNotifyUrl( 'https://www.wpzhiku.com/order_return' ); return $gateway; }
第二步:调用接口,跳转到支付宝支付
提供生成订单必需的数据,如果订单号,订单金额订单标题等,创建订单,并跳转到支付宝支付。
// 在线充值 new Dispatch( [ 'online_charge' => function ( $request ) { $mount = trim( $_POST['mount'] ); $tn = "p4" . order_no(); # 计算总金额 $total_fee = array_sum( $mount ); #计算总金额 // 创建订单数据, 可以是前台提交, 也可以是自动生成 $options = [ 'out_trade_no' => $tn, //生成唯一订单号 'subject' => '在线充值', //订单标题 'total_fee' => $total_fee, //订单总金额 ]; // 获取支付网关 $gateway = get_gate_way(); $response = $gateway->purchase( $options )->send(); // 直接跳转到支付宝支付 $response->redirect(); }, ] );
第三步:处理返回数据,根据返回数据处理订单
这里是 return_url 的内容 ,跟据接受到的参数,联系支付宝验证订单支付状态,根据验证状态确定支付成功,如果支付成功,处理订单(这里是直接显示一个支付成功的字符串),如果支付失败,返回支付失败信息。
// 处理支付宝返回信息 new Dispatch( [ 'order_return' => function ( $request ) { $options = [ 'request_params' => $_REQUEST, ]; $gateway = get_gate_way(); $response = $gateway->completePurchase( $options )->send(); if ( $response->isSuccessful() && $response->isTradeStatusOk() ) { $total_fee = $_GET[ 'total_fee' ]; $trade_no = $_GET[ 'trade_no' ]; $out_trade_no = $_GET[ 'out_trade_no' ]; $subject = $_GET[ 'subject' ]; $body = $_GET[ 'body' ]; echo "支付成功"; } else { echo "支付失败"; } } )]
上面的示例代码中,只是简单的介绍了一下 Omnipay-Alipay 的使用方法和流程,在具体的项目中,我们还是要根据我们的需要,来实现具体的业务逻辑的,这个在这里就不多说了。除此之外,我们还可以找到 Omnipay-UnionPay(银联支付)和 Omnipay-WeChat(微信支付)这两个国内的常见支付平台处理库。