支付宝屎一般的支付 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(微信支付)这两个国内的常见支付平台处理库。