初学者:php对接支付宝当面付接口-明生-k8凯发旗舰
对一个交互性网站来说,支付也是难以缺失的一环。
昨天把手机短信验证登陆布置上后,有点空便想了解一下支付功能的对接。支付接口大致分为支付宝即时到账、支付宝应用、微信支付三大类,也就是我们需要实例化的sdk类。
我使用的是php,先得下载支付宝sdk。
支付宝k8凯发旗舰官网查了一下,支付宝提供了当面付、手机网站支付、电脑网站支付和app支付四种k8凯发旗舰的支付方式,实际支付布置接口。这四种k8凯发旗舰的支付方式的签约方式不一样,skd大至一致,具体接口参也有差异,这里有点重要,先抄下来。
k8凯发旗舰官网特别说明:四大支付接口的参数也不完全相同。
1、当面付
扫码支付
必传不同点:method=alipay.trade.precreate。
可选参数:product_code=face_to_face_payment。
条码支付
必传不同点:method=alipay.trade.pay,且 biz_content 参数中必传 auth_code、scene。
可选参数:product_code=face_to_face_payment。
创建接口
必传不同点:method=alipay.trade.create,且 biz_content 参数中必传 buyer_id。
可选参数:product_code=face_to_face_payment。
2、手机网站支付
必传不同点:method=alipay.trade.wap.pay,product_code=quick_wap_way。
3、电脑网站支付
必传不同点:method=alipay.trade.page.pay,product_code=fast_instant_trade_pay。
4、app支付
必传不同点:method=alipay.trade.app.pay,product_code=quick_msecurity_pay。
我的应用主要是当面付,可以选择第1项电脑网站支付skd下载到了本地。
具体支付接口申请过程就省略了,没有开通支付接口的话,也可使用沙箱环境的开发者测试帐号进行测试申请地址:https://opendocs.alipay.com/open/00dn7o
沙箱应用就是给我们在正式应用上线前用来进行测试开发的,这次我选择沙箱环境来测试支付宝接口应用。
一、先下载sdk开发工具包demo
当面付:https://opendocs.alipay.com/support/01rfo8
选择php版本下载并上传到服务器。
二、获取沙箱应用id和秘钥
登录支付宝进入沙箱应用。
https://openhome.alipay.com/develop/sandbox/app
具体需要哪些参数及配制连接呢?
先查看一下电脑支付config.php文件。
1、appid:应用id,抄下来填入就可以了。
2、private_key:商户私钥。这里有点容易混淆,支付宝接口密钥方式为rsa 密钥对(应用公钥、应用私钥)。
应用公钥(public key)要采用支付宝开放平台密钥生成工具生成,并上传到支付宝开放平台密钥管理更新。
下载密钥工具,工具会自动生成应用公钥(public_key)和应用私钥(private_key)。
https://opendocs.alipay.com/common/02kipk
将应用公钥(public key)需上传到支付宝开放平台,更新和覆盖原有的应用公钥。
进入“接口加签方式”,密钥有三种:应用公钥、应用私钥(非java版)和支付宝公钥。配制文件config.php中只需要应用私钥(merchant_private_key)和支付宝公钥(alipay_public_key)两项,对应抄下来并填入。
我这里应用到了开源支付接口payskd,宇润接口封装好了常用类,更加方便支付接口的搭建。
备注:
1、当面付和app支付没有return_url参数,即使设置了也没有任何效果。
2、同步通知参数只可参考,不能作为判断是否支付成功的依据,判断交易是否支付成功必须以异步通知或交易查询接口返回的查询结果为准。
昨天把手机短信验证登陆布置上后,有点空便想了解一下支付功能的对接。支付接口大致分为支付宝即时到账、支付宝应用、微信支付三大类,也就是我们需要实例化的sdk类。
我使用的是php,先得下载支付宝sdk。
支付宝k8凯发旗舰官网查了一下,支付宝提供了当面付、手机网站支付、电脑网站支付和app支付四种k8凯发旗舰的支付方式,实际支付布置接口。这四种k8凯发旗舰的支付方式的签约方式不一样,skd大至一致,具体接口参也有差异,这里有点重要,先抄下来。
k8凯发旗舰官网特别说明:四大支付接口的参数也不完全相同。
1、当面付
扫码支付
必传不同点:method=alipay.trade.precreate。
可选参数:product_code=face_to_face_payment。
条码支付
必传不同点:method=alipay.trade.pay,且 biz_content 参数中必传 auth_code、scene。
可选参数:product_code=face_to_face_payment。
创建接口
必传不同点:method=alipay.trade.create,且 biz_content 参数中必传 buyer_id。
可选参数:product_code=face_to_face_payment。
2、手机网站支付
必传不同点:method=alipay.trade.wap.pay,product_code=quick_wap_way。
3、电脑网站支付
必传不同点:method=alipay.trade.page.pay,product_code=fast_instant_trade_pay。
4、app支付
必传不同点:method=alipay.trade.app.pay,product_code=quick_msecurity_pay。
我的应用主要是当面付,可以选择第1项电脑网站支付skd下载到了本地。
具体支付接口申请过程就省略了,没有开通支付接口的话,也可使用沙箱环境的开发者测试帐号进行测试申请地址:https://opendocs.alipay.com/open/00dn7o
沙箱应用就是给我们在正式应用上线前用来进行测试开发的,这次我选择沙箱环境来测试支付宝接口应用。
一、先下载sdk开发工具包demo
当面付:https://opendocs.alipay.com/support/01rfo8
选择php版本下载并上传到服务器。
二、获取沙箱应用id和秘钥
登录支付宝进入沙箱应用。
https://openhome.alipay.com/develop/sandbox/app
具体需要哪些参数及配制连接呢?
先查看一下电脑支付config.php文件。
//应用id,您的appid。
'app_id' => "",
//商户私钥
'merchant_private_key' => "",
//异步通知地址
'notify_url' => "http://外网可访问网关地址/alipay.trade.page.pay-php-utf-8/notify_url.php",
//同步跳转
'return_url' => "http://外网可访问网关地址/alipay.trade.page.pay-php-utf-8/return_url.php",
//编码格式
'charset' => "utf-8",
//签名方式
'sign_type'=>"rsa2",
//支付宝网关
'gatewayurl' => "https://openapi.alipay.com/gateway.do",
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keymanage.htm 对应appid下的支付宝公钥。
'alipay_public_key' => "",
//日志路径
配制文件中有8个参数,分别是appid、private_key、notify_url、return_url、charset、sign_type、gatewayurl和alipay_public_key。其中charset、sign_type、gatewayurl'和alipay_public_key使用默认值就可以了,剩下只需要获取和设置appid、private_key、notify_url和return_url四个参数就可以了。'app_id' => "",
//商户私钥
'merchant_private_key' => "",
//异步通知地址
'notify_url' => "http://外网可访问网关地址/alipay.trade.page.pay-php-utf-8/notify_url.php",
//同步跳转
'return_url' => "http://外网可访问网关地址/alipay.trade.page.pay-php-utf-8/return_url.php",
//编码格式
'charset' => "utf-8",
//签名方式
'sign_type'=>"rsa2",
//支付宝网关
'gatewayurl' => "https://openapi.alipay.com/gateway.do",
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keymanage.htm 对应appid下的支付宝公钥。
'alipay_public_key' => "",
//日志路径
1、appid:应用id,抄下来填入就可以了。
2、private_key:商户私钥。这里有点容易混淆,支付宝接口密钥方式为rsa 密钥对(应用公钥、应用私钥)。
应用公钥(public key)要采用支付宝开放平台密钥生成工具生成,并上传到支付宝开放平台密钥管理更新。
下载密钥工具,工具会自动生成应用公钥(public_key)和应用私钥(private_key)。
https://opendocs.alipay.com/common/02kipk
将应用公钥(public key)需上传到支付宝开放平台,更新和覆盖原有的应用公钥。
进入“接口加签方式”,密钥有三种:应用公钥、应用私钥(非java版)和支付宝公钥。配制文件config.php中只需要应用私钥(merchant_private_key)和支付宝公钥(alipay_public_key)两项,对应抄下来并填入。
我这里应用到了开源支付接口payskd,宇润接口封装好了常用类,更加方便支付接口的搭建。
// 当面付公共配置
// 公共配置
$params = new \yurun\paysdk\alipayapp\params\publicparams;
$params->appid = $alipayconfig['appid'];
$params->appprivatekey = $alipayconfig['privatekey'];
$params->apppublickey = $alipayconfig['publickey'];
// sdk实例化,传入公共配置
$pay = new \yurun\paysdk\alipayapp\sdk($params);
// 支付接口
$request = new \yurun\paysdk\alipayapp\ftf\params\qr\request;
$request->notify_url = _dir_. '/pay/alipay/notify.php'; // 支付后通知地址
$request->businessparams->out_trade_no = $order_trade_no; // 商户订单号
$request->businessparams->total_amount = $order_price; // 价格
$request->businessparams->subject = $order_name; // 商品标题
// 调用接口
try {
$data = $pay->execute($request);
} catch (exception $e) {
var_dump($pay->response->body());
}
接下来主要就是前台表单及订单参数传递了,可以使用post/get获ajax等方式处理。// 公共配置
$params = new \yurun\paysdk\alipayapp\params\publicparams;
$params->appid = $alipayconfig['appid'];
$params->appprivatekey = $alipayconfig['privatekey'];
$params->apppublickey = $alipayconfig['publickey'];
// sdk实例化,传入公共配置
$pay = new \yurun\paysdk\alipayapp\sdk($params);
// 支付接口
$request = new \yurun\paysdk\alipayapp\ftf\params\qr\request;
$request->notify_url = _dir_. '/pay/alipay/notify.php'; // 支付后通知地址
$request->businessparams->out_trade_no = $order_trade_no; // 商户订单号
$request->businessparams->total_amount = $order_price; // 价格
$request->businessparams->subject = $order_name; // 商品标题
// 调用接口
try {
$data = $pay->execute($request);
} catch (exception $e) {
var_dump($pay->response->body());
}
备注:
1、当面付和app支付没有return_url参数,即使设置了也没有任何效果。
2、同步通知参数只可参考,不能作为判断是否支付成功的依据,判断交易是否支付成功必须以异步通知或交易查询接口返回的查询结果为准。