最近为客户开发了一个wordpress的开发实例,现在分享出来给大家。
本文为大家介绍支付网关 API 创建自定义支付网关的方法。
wordpress的电商功能,WooCommerce已经进行了包装,因此在WooCommerce框架下开发支付网关插件
WooCommerce有 4 种类型的支付网关:
基于表单 – 这种方法中,用户必须点击表单中的提交按钮,然后跳转到第三方支付网关的网站处理支付。如 PayPal 标准接口, Authorize.net DPM,支付宝。
基于 iFrame – 这种方法在 iframe 内加载网关支付系统,如: SagePay 表单, PayPal 高级接口。
直接支付 – 如果使用这种支付方法,在结帐页面当点击 ‘下订单’ 的同时,已经支付成功了。 如: PayPal Pro, Authorize.net AIM
线下支付 – 没有线上处理过程. 如: Cheque, Bank Transfer
1.首先按照插件的开发规则,开发好插件的源码,然后在wordpress后台进行上传即可。
2.本文主要讲支付插件的开发。
add_action( 'plugins_loaded', 'init_your_gateway_class' );
function init_your_gateway_class() {
class WC_Gateway_Your_Gateway extends WC_Payment_Gateway {}
}
function add_your_gateway_class( $methods ) {
$methods[] = 'WC_Gateway_Your_Gateway';
return $methods;
}
add_filter( 'woocommerce_payment_gateways', 'add_your_gateway_class' );
public function process_payment( $order_id ) {
$order = wc_get_order( $order_id );
file_put_contents("wulog.txt", date('Y-m-d H:i:s')."--order_id[" . $order_id . "]
",FILE_APPEND);
file_put_contents("wulog.txt", date('Y-m-d H:i:s')."--order[" . json_encode($order) . "]
",FILE_APPEND);
$data=$_REQUEST;
file_put_contents("wulog.txt", date('Y-m-d H:i:s')."--_REQUEST[" . json_encode($_REQUEST) . "]
",FILE_APPEND);
$mdkey='kr0x9p6zhouabwca4o6ato9otyeiz11g';
$args = array(
'pay_memberid'=> 10055,
'pay_orderid'=> $order_id,
'pay_applydate'=> date('Y-m-d H:i:s'),
'pay_bankcode'=> '918',
'pay_notifyurl'=> 'https://www.abc.vip/asiabillmain/pay/webhook_shop.php',
'pay_callbackurl'=> 'https://www.abc.vip/asiabillmain/pay/webhook_shop.php',
'pay_amount'=> $order->get_total(),
);
$data['order_no']=$order_id;
$data['orderAmount']=$order->get_total();
$sign=$this->Make_Sign($args,$mdkey);
$args['pay_md5sign'] = $sign;
$args['pay_productname'] = 'online';
$args['pay_productdesc'] = 'online';
$args['pay_producturl'] = 'https://www.abc.vip/product/black-printed-coffee-mug/';
$args['pay_buyer'] = $data['billing_first_name'].' '.$data['billing_last_name'];
$args['pay_address'] = $data['billing_address_1'];
$args['pay_phone'] = $data['billing_phone'];
$args['pay_email'] = $data['billing_email'];
$args['pay_website'] = 'www.shoprong.vip';
$args['pay_currency'] = 'usd';
$args['pay_type'] = 'app';
$url='https://www.xxx.com/Pay_Index.html';
$response = $this->PostCurl( $url, $args );
//$response=preg_replace_callback('/\\u([0-9a-f]{4})/i', create_function('$matches', 'return iconv("UCS-2BE","UTF-8",pack("H*", $matches[1]));'), $response);
$response = $this->decodeUnicode($response);
file_put_contents("wulog.txt", date('Y-m-d H:i:s')."--response[" . $response . "]
",FILE_APPEND);
$result=json_decode($response,true);
if ($result['returncode']=='00')
{
$data['transaction_id']=$result['transaction_id'];
$jumpUrl=$result['payUrl'].'?'.http_build_query($data);
//$jumpUrl=urlencode($jumpUrl);
file_put_contents("wulog.txt", date('Y-m-d H:i:s')."--jumpUrl[" . $jumpUrl . "]
",FILE_APPEND);
//header("Location: ".$jumpUrl);
return array(
'result' => 'success',
'redirect' => $jumpUrl
);
}
else
{
wc_add_notice( 'The order is duplicated. Please try again.', 'error' );
return;
}
}
开发后的支付页面如下图所示:
大家有需要可以跟我联系:QQ:804752009