一、PC端(电脑端)网站扫码支付接口申请流程
1. 注册是支付宝商家账号 —— 注册地址;
2. 注册成功后,找到蚂蚁金服开放平台,点击支付应用;
3. 创建应用
4. 添加应用中的电脑支付功能
5. 开发配置
说明:
(1)其中的支付宝网关地址不用改;
(2)应用网关设置为你网站的域名(如:https://www.xxx.com/),所以这个位置的设置就决定了你的网站首先要上线、然后域名解析到服务器上才可以申请支付宝的支付接口;
(3)授权回调地址不用设置,一般如果涉及到第三方访问应用的时候才需要设置;
(4)设置应用公钥 —— 获取应用公钥和私钥的参考文档。
6. 当配置好后,直接提交审核,之后就等待审核了。
二、准备配置参数
当我们支付宝电脑支付功能所在应用申请成功后,我们需要获取一系列支付宝支付配置参数。
1. app_id :应用ID,在这个地址中查看:https://openhome.alipay.com/platform/keyManage.htm;
2. merchant_private_key:商户私钥。这个在获取应用公钥和私钥时就已经获取到,公钥上传到支付宝中,私钥就在项目中与之匹配验证;
3. notify_url : 异步通知回调地址。支付成功后,支付宝回调服务器的地址;
4. return_url:同步跳转地址。支付成功回调了服务器的地址后,自动跳转到目标地址;
5. charset:编码格式,一般为“UTF-8”;
6. sign_type:签名方式,一般为“RSA2”;
7. gatewayUrl:支付宝网关,https://openapi.alipay.com/gateway.do;
8. alipay_public_key:支付宝公钥,在这个地址查看:https://openhome.alipay.com/platform/keyManage.htm。
三、实际应用举例(ThinkPHP3.2)
1. 下载支付宝支付demo,下载地址:https://docs.open.alipay.com/270/106291/;
2. 解压,将文件包放入 /ThinkPHP/Library/Vendor/ 文件夹下,如:
3. 在配置文件中配置支付宝配置参数,文件路径:/application/Common/config/config.php;
4. 控制器中生成支付二维码的代码
public function alipay()
{
// 配置参数
$res = array();
$res['out_trade_no'] = $_POST['orderno']; // 商户订单号
$res['subject'] = $_POST['title']; // 商品名称
$res['total_amount'] = $_POST['total']; // 商品总价
$res['body'] = $_POST['description']; // 商品描述
// 引入支付核心文件
Vendor('Alipay.AopSdk');
Vendor("Alipay.pagepay.service.AlipayTradeService");
Vendor("Alipay.pagepay.buildermodel.AlipayTradePagePayContentBuilder");
// 获取支付宝配置参数
$config = C("alipay");
//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = $res["out_trade_no"];
//订单名称,必填
$subject = trim($res["subject"]);
//付款金额,必填
$total_amount = $res["total_amount"];
//商品描述,可空
$body = trim($res["body"]);
//构造参数
$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$aop = new \AlipayTradeService($config);
/**
* pagePay 电脑网站支付请求
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @param $return_url 同步跳转地址,公网可以访问
* @param $notify_url 异步通知地址,公网可以访问
* @return $response 支付宝返回的信息
*/
$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);
//输出支付二维码
var_dump($response);
}
此处流程:用户点击支付后,直接访问该地址,并将购买商品的订单号、商品名称、商品总价以及商品描述等参数传递过来,支付宝自动生成支付二维码页面。用户扫描支付后,自动回调,回调如下:
public function ailpay_notify(){
// 引入核心类文件
Vendor("Alipay.pagepay.service.AlipayTradeService");
// 获取支付宝配置参数
$config = C('alipay');
// 获取返回值
$arr = $_POST;
// 检查数据
$alipaySevice = new \AlipayTradeService($config);
$alipaySevice->writeLog(var_export($_POST,true));
$result = $alipaySevice->check($arr);
// 判断检查结果数据
if($result) {
// 获取相关数据
$out_trade_no = $arr['out_trade_no']; //商户订单号
$trade_no = $arr['trade_no']; //支付宝交易号
$trade_status = $arr['trade_status']; //交易状态
$total_amount = $arr['total_amount']; //交易金额
$buyerid = $arr['buyer_id']; //卖家支付宝账号id
// 判断数据是否做过处理,如果做过处理,return,没有做过处理,执行支付成功代码
if($trade_status == 'TRADE_FINISHED' OR $trade_status == 'TRADE_SUCCESS') {
// 修改订单状态
// 修改用户拥有商品状态
// codeding……
echo "success";
}else{
echo "fail";
}
}else {
echo "fail";
}
}
ps:至此,一个完整的支付宝集合支付宝电脑版支付api过程已经完成。但是,我们经常会在真正申请支付宝应用前使用沙箱模式进行测试,那怎么进行呢?
如下步骤:
(1)登录支付宝商户账号,找到栏目开发者中心,点击研发服务,如下图:
(2)在沙箱应用下配置我们之前说到的那些配置参数,然后获取到这些配置参数。
(3)然后其他操作和真实应用一模一样。
(4)沙箱版配置生成的支付二维码只能通过沙箱版支付宝APP进行扫描支付。具体下载参考:沙箱环境中的沙箱账号和沙箱工具。
四、参考文档
1. 支付宝电脑版支付API文档;
2. 沙箱环境使用文档;
总结:通过支付宝电脑版支付的流程,基本有思路去集成支付宝其他终端的支付功能,并且相关的退款、查询订单等功能也可以顺着文档支付宝的demo去试验,长点见识总是好的,亲自去感知一遍过程,对很多事情的想法会不一样。
祝好运!