本篇文章讲到的是支付宝即时到账接口,我们要对接支付宝支付,可以先浏览一下官方文档
即时到账接口对接起来还是比较简单的
首先准备好即时到账接口所需的参数,把它放到一个数组中
$partner = '2088112718209116';//合作者伙伴id(开通支付宝商户后会有一个合作者伙伴id,这里改成自己的合作者伙伴id)
$key = 'jj1j00zwzkjlwnh19bu87tyv9dzjj4n2';//安全校验码KEY(开通支付宝商户后会有一个安全校验码KEY,这里改成自己的安全校验码KEY)
$params = [
'service' => 'create_direct_pay_by_user',//接口名称
'partner' => $partner,//合作者伙伴id
'_input_charset' => 'UTF-8',//字符集
'sign_type' => 'MD5',//签名方式
'sign' => '',//签名
'notify_url' => 'http://www.zhiboblog.com/notify.php',//异步通知地址
'return_url' => 'http://www.zhiboblog.com/return.php',//同步通知地址
'out_trade_no' => time().rand(1,9999),//订单号
'subject' => '测试商品',//商品标题
'payment_type' => 1,//支付类型 只取值为1(商品购买) 固定值
'total_fee' => 0.01,//交易金额 单位为元
'seller_id' => $partner,//卖家支付宝,可以填合作者伙伴id
];
$key = 'jj1j00zwzkjlwnh19bu87tyv9dzjj4n2';//安全校验码KEY(开通支付宝商户后会有一个安全校验码KEY,这里改成自己的安全校验码KEY)
$params = [
'service' => 'create_direct_pay_by_user',//接口名称
'partner' => $partner,//合作者伙伴id
'_input_charset' => 'UTF-8',//字符集
'sign_type' => 'MD5',//签名方式
'sign' => '',//签名
'notify_url' => 'http://www.zhiboblog.com/notify.php',//异步通知地址
'return_url' => 'http://www.zhiboblog.com/return.php',//同步通知地址
'out_trade_no' => time().rand(1,9999),//订单号
'subject' => '测试商品',//商品标题
'payment_type' => 1,//支付类型 只取值为1(商品购买) 固定值
'total_fee' => 0.01,//交易金额 单位为元
'seller_id' => $partner,//卖家支付宝,可以填合作者伙伴id
];
然后生成签名,对于新手来说,可能对签名的规则不太理解。
这里我详细讲一下,如何生成签名
1.筛选
剔除sign与sign_type参数
2.排序
按照键名字母升序排序
3.拼接
将排序后的参数与其对应值,组合成“参数=参数值”的格式,并且把这些参数用&字符连接起来,此时生成的字符串为待签名字符串。MD5签名的商户需要将key的值拼接在字符串后面,调用MD5算法生成sign
$str = urldecode(http_build_query($params));//生成待签名字符串
$sign = md5($str.$key);//将key值拼接在待签名字符串后面,然后md5加密,就得到了签名
$sign = md5($str.$key);//将key值拼接在待签名字符串后面,然后md5加密,就得到了签名
4.将生成的签名,赋给数组
$params['sign'] = $sign;
5.生成支付页面链接
6.跳转到支付页面支付
下面我封装了一个支付宝即时到账接口类,网站对接支付宝支付的时候可直接调用。
<?php
class Alipay
{
const PID = '2088112718209116';//合作者身份pid(这里改成自己的)
const KEY = 'jj1j00zwzkjlwnh19bu87tyv9dzjj4n2';//安全校验码key(这里改成自己的)
const PAYGATEWAY = 'https://mapi.alipay.com/gateway.do';//支付宝网关地址
const REURL = 'http://www.zhiboblog.com/return.php';//同步通知地址(这里改成自己的)
const NOURL = 'http://www.zhiboblog.com/notify.php';//异步通知地址(这里改成自己的)
public function __construct()
{
$params = [
'service' => 'create_direct_pay_by_user',//接口名称
'partner' => self::PID,//合作者伙伴id
'_input_charset' => 'UTF-8',//字符集
'sign_type' => 'MD5',//签名方式
'sign' => '',//签名
'notify_url' => self::NOURL,
'return_url' => self::REURL,
'out_trade_no' => time().rand(1,9999),
'subject' => '测试商品',//商品标题
'payment_type' => 1,//支付类型 只取值为1(商品购买) 固定值
'total_fee' => 0.01,//交易金额 单位为元
'seller_id' => self::PID,//卖家支付宝,可以填合作者伙伴id
];
$params = $this->setSign($params);//获取带签名的数组
$url = self::PAYGATEWAY .'?'. $this->getUrl($params);
header('Location:'.$url);
}
public function getStr($arr)
{
//筛选
if(isset($arr['sign'])){
unset($arr['sign']);
}
if(isset($arr['sign_type'])){
unset($arr['sign_type']);
}
//排序
ksort($arr);
//拼接
return $this->getUrl($arr,false);
}
//将数组转换为url格式的字符串
public function getUrl($arr,$encode=true)
{
if($encode){
return http_build_query($arr);
}else{
return urldecode(http_build_query($arr));
}
}
//获取签名
public function getSign($arr)
{
return md5($this->getStr($arr) . self::KEY);
}
//获取含有签名的数组
public function setSign($arr)
{
$arr['sign'] = $this->getSign($arr);
return $arr;
}
}
$obj = new Alipay();
class Alipay
{
const PID = '2088112718209116';//合作者身份pid(这里改成自己的)
const KEY = 'jj1j00zwzkjlwnh19bu87tyv9dzjj4n2';//安全校验码key(这里改成自己的)
const PAYGATEWAY = 'https://mapi.alipay.com/gateway.do';//支付宝网关地址
const REURL = 'http://www.zhiboblog.com/return.php';//同步通知地址(这里改成自己的)
const NOURL = 'http://www.zhiboblog.com/notify.php';//异步通知地址(这里改成自己的)
public function __construct()
{
$params = [
'service' => 'create_direct_pay_by_user',//接口名称
'partner' => self::PID,//合作者伙伴id
'_input_charset' => 'UTF-8',//字符集
'sign_type' => 'MD5',//签名方式
'sign' => '',//签名
'notify_url' => self::NOURL,
'return_url' => self::REURL,
'out_trade_no' => time().rand(1,9999),
'subject' => '测试商品',//商品标题
'payment_type' => 1,//支付类型 只取值为1(商品购买) 固定值
'total_fee' => 0.01,//交易金额 单位为元
'seller_id' => self::PID,//卖家支付宝,可以填合作者伙伴id
];
$params = $this->setSign($params);//获取带签名的数组
$url = self::PAYGATEWAY .'?'. $this->getUrl($params);
header('Location:'.$url);
}
public function getStr($arr)
{
//筛选
if(isset($arr['sign'])){
unset($arr['sign']);
}
if(isset($arr['sign_type'])){
unset($arr['sign_type']);
}
//排序
ksort($arr);
//拼接
return $this->getUrl($arr,false);
}
//将数组转换为url格式的字符串
public function getUrl($arr,$encode=true)
{
if($encode){
return http_build_query($arr);
}else{
return urldecode(http_build_query($arr));
}
}
//获取签名
public function getSign($arr)
{
return md5($this->getStr($arr) . self::KEY);
}
//获取含有签名的数组
public function setSign($arr)
{
$arr['sign'] = $this->getSign($arr);
return $arr;
}
}
$obj = new Alipay();