paylinks.php_支付宝+银联统一支付功能实现

本文档展示了如何在PHP中实现支付宝和银联的统一支付功能。主要涉及配置模型、构造请求参数、生成支付链接以及支付回调通知的处理。在调试过程中要注意参数传递的准确性,例如money、deal_name、order_sn等。代码中包含了创建支付宝支付链接的函数alipay_link(),并有检查签名验证的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现调试错误一般是参数传错了

1、配置model里面的config,model里其他东西根本不用看

2、构造请求参数$payment

money、deal_name和订单号notice_sn是你随便给的,bank_id在页面用 radio传过来的其值是我给的那些银行ID,比如工行就是ICBCB2C

PaymentModel:正在连接支付接口...';

$payLinks.='';

return $payLinks;

}

// 支付宝链接

function alipay_link($form){

$payment_notice = array(

'money'=>$form['money'],

'deal_name'=>$form['order_name'],

'bank_id'=>$form['bank_id'],

'notice_sn'=>$form['order_sn'],

);

$money = round($payment_notice['money'],2);

$payment_info = $this->config;

$subject = $payment_notice['deal_name'];

$data_return_url = $payment_info['return_url'];

$data_notify_url = $payment_info['notify_url'];

$parameter = array(

'service' => 'create_direct_pay_by_user',

'partner' => $payment_info['alipay_partner'],

//'partner' => ALIPAY_ID,

'_input_charset' => 'utf-8',

'notify_url' => $data_notify_url,

'return_url' => $data_return_url,

/* 业务参数 */

'subject' => $subject,

'out_trade_no' => $payment_notice['notice_sn'],

'price' => $money,

'quantity' => 1,

'payment_type' => 1,

/* 物流参数 */

'logistics_type' => 'EXPRESS',

'logistics_fee' => 0,

'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',

'extend_param' => 'changjianghu',

/* 买卖双方信息 */

'seller_email' => $payment_info['alipay_account']

);

// print_r($parameter);exit;

$parameter = $this->argSort($parameter);

$param = '';

$sign = '';

foreach ($parameter AS $key => $val)

{

$param .= "$key=" .urlencode($val). "&";

$sign .= "$key=$val&";

}

$param = substr($param, 0, -1);

$sign = substr($sign, 0, -1). $payment_info['alipay_key'];

$sign_md5 = md5($sign);

$payLinks = '正在连接支付接口...';

$payLinks.='';

return $payLinks;

}

/*结果*/

function notify($request){

$return_res = array(

'info'=>'',

'status'=>false,

);

$payment = $this->config;

$request = $this->argSort($request);

/* 检查数字签名是否正确 */

$isSign = $this->getSignVeryfy($request);

if (!$isSign){//签名验证失败

$return_res['info'] = '签名验证失败';

return $return_res;

}

if ($request['trade_status'] == 'TRADE_SUCCESS' || $request['trade_status'] == 'TRADE_FINISHED' || $request['trade_status'] == 'WAIT_SELLER_SEND_GOODS' || $request['trade_status'] == 'WAIT_BUYER_CONFIRM_GOODS'){

$return_res['status'] = true;

}

return $return_res;

}

// 获取返回时的签名验证结果

function getSignVeryfy($para_temp) {

//除去待签名参数数组中的空值和签名参数

$para_filter = $this->paraFilter($para_temp);

//对待签名参数数组排序

$para_sort = $this->argSort($para_filter);

//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串

$prestr = $this->createLinkstring($para_sort);

$isSgin = false;

$isSgin = $this->md5Verify($prestr, $para_temp['sign'], $this->config['alipay_key']);

return $isSgin;

}

// 验证签名

function md5Verify($prestr, $sign, $key) {

$prestr = $prestr . $key;

$mysgin = md5($prestr);

if($mysgin == $sign) {

return true;

}

else {

return false;

}

}

// 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串

function createLinkstring($para) {

$arg = "";

while (list ($key, $val) = each ($para)) {

$arg.=$key."=".$val."&";

}

//去掉最后一个&字符

$arg = substr($arg,0,count($arg)-2);

//如果存在转义字符,那么去掉转义

if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}

return $arg;

}

// 除去数组中的空值和签名参数

function paraFilter($para) {

$para_filter = array();

while (list ($key, $val) = each ($para)) {

if($key == "sign" || $key == "sign_type" || $val == "")continue;

else $para_filter[$key] = $para[$key];

}

return $para_filter;

}

// 对数组排序

function argSort($para) {

ksort($para);

reset($para);

return $para;

}

}

?>HTML模板:

有一部分朋友对支付宝包装网银相当感兴趣,作为一个程序猿在这给大家解密它的工作逻辑原理 最近市面上很受欢迎的网银支付接口也比较稳定的网银接口就属,支付宝包装的网银接口了,目前市面上三方网银接口能够去用的不多几乎很少,也很难去寻找一条稳定的通道。 支持网银直连多家银行,原生在线网银支付接口。 商户管理、交易管理、通道管理、账号管理、自动轮询、PC端监控安全稳定,全自动回调,零延迟。 废话不多说下面就进入正题,既然能通过支付宝去调取网银接口,那么支付宝里面肯定是有通过支付宝去连接到网银的入口,那我们就先去找一下这个入口。 首先我们需要准备一个支付宝账号(最好是企业支付宝),登录到支付宝,在支付宝首页我们找到充值按钮点进去看一下。点进去之后我们就可以看到一个余额充值页面,这里显示需要通过网银支付去充值,那么我们就找到了,支付宝和网银链接入口了,点击更多那里我们可以看到,支付宝支持的银行列表,支持的银行还是蛮多的,所以这个要是做成支付通道,那么肯定是相当不错了。 看看是否可以正常跳转到网银支付页面,这边用交通银行测试提交,可以看到能正常提交到交通银行网银付款页面,也就是和三方网银付款页面效果是一样的。 到这里我们就相当于完成了从支付宝请求到银行的过程了,也就是说我们需要把这个入口拿到之后,和我们的程序进行对接就可以完成网银支付通道的对接了,那么如何把请求发到支付宝支付宝去完成这个操作呢?(这个在这里就不详细讲解了,需要的朋友请‘滴’我) 下面我们去讲一下如何去做支付订单的回调,既然请求支付了肯定需要判断,是否支付成功,还是未支付。那么我们就需要找到我们充值的那笔是否在支付宝里面可以查到记录。 我们在充值页面那里可以看到有个充值记录,也就是我们充值余额之后的记录,在这里只要充值成功的都会有记录,没有支付的就不会在这里显示,也就是只显示支付的记录。 从这里就可以看到有显示时间、单号、渠道、银行单号、金额、状态等等,这样我们可以通过这些参数去做通知回调处理,当然这里肯定需要用到抓取订单记录,比如爬虫技术等等,在这里就不详细讲解了,有问题的朋友请联系我。 好了到这里支付宝包装网银,支付宝网关原理就分享完了,如果需要程序的朋友可以直接‘滴’我,这边已有成品可以直接拿去使用。 支付宝网银网关软件是一款实现全天24小时无人值守、自动查询支付宝订单并通知网站接口实现即时到帐的支付宝辅助工具。它完全替代了第三方支付平台,能自动监控支付宝 账户的即时收款订单,及时自动完成交易。成功地解决了中、小企业及非企业站长因使用第三方支付平台而造成的网站资金周转困难,手续费昂贵,商品成本提高等 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值