PHP 接入支付宝公钥证书指南

为了简单快速的接入,在申请支付宝商户后,我们可通过沙箱应用进行测试

准备证书

首先登录支付宝开放平台沙箱环境:开放平台-沙箱环境

RSA2(SHA256)密钥 设置中的加签模式选择 公钥证书,然后访问 开放平台文档中心 - 签名专区 - 工具 下载对应操作系统的 支付宝开放平台开发助手

打开 支付宝开放平台开发助手 后,直接点击左下角 获取 CSR 文件:【你没看错,就是 PKCS8获取CSR文件 沙箱环境必须在“组织/公司”一栏处填写“<font color="red">沙箱环境</font>,其它信息可随意,域名参考即可。 如果需要可填写自身用于调试的域名,可填写根域名如 example.com,或二级域名 api.example.com

点击下方打开文件位置,可以看到如下三个文件:

1xxx.alipay.com.csr 2xxx.alipay.com_公钥.txt 3xxx.alipay.com_私钥.txt
正式环境中私钥非常重要,请妥善保存

回到网页,上传已生成的 CSR 文件: 上传 CSR 文件 接着下载页面上的三个文件: 下载三个证书文件 记得下载安装下方沙箱版钱包,用于调试沙箱环境支付【仅支持 Android】

编写代码

这里提供两种方式,一是直接接入官方 SDK,通过 require/include 加载;二是通过 Composer 包自动加载

官方 SDK

首先需在此下载官方 SDK:App支付服务端 DEMO & SDK

然后在 PHP 服务端 SDK 生成 APP 支付订单信息示例 中参考下单代码。

证书相关参数设置参考 JAVA 服务端 SDK 生成 APP 支付订单信息示例(证书)

Composer 包

推荐使用 omnipay-alipay,博主已提交代码支持公钥证书模式

使用方法非常简单:

1// 创建基本网关 2$gateway = Omnipay::create('Alipay_AopApp'); // App 支付 3 4// 使用证书模式时必须设置签名类型为 RSA2 5$gateway->setSignType('RSA2'); 6 7// 以下设置基本的 AppID、私钥、支付宝根证书、支付宝及 App 公钥证书等等 8$gateway->setAppId('the_app_id'); 9$gateway->setPrivateKey('the_app_private_key'); 10// $gateway->setAlipayPublicKey('the_alipay_public_key'); // 【删除此行】证书模式无需设置支付宝公钥 11$gateway->setAlipayRootCert('the_alipay_root_cert'); // 对应 alipayRootCert.crt 文件 12$gateway->setAlipayPublicCert('the_alipay_public_cert'); // 对应 alipayCertPublicKey_RSA2.crt 文件 13$gateway->setAppCert('the_app_public_cert'); // appCertPublicKey.crt 14// 检查支付宝公钥证书【可忽略】 15$gateway->setCheckAlipayPublicCert(true); 16// 相关回调通知地址 17$gateway->setReturnUrl('https://www.example.com/return'); 18$gateway->setNotifyUrl('https://www.example.com/notify');

至此基本的网关构建就完成了,最后对网关进行需要的操作就行了,例如创建订单:

1/** @var AopTradeAppPayResponse $response */ 2$response = $gateway->purchase()->setBizContent([ 3 // 请求内容参考支付宝文档 4])->send(); 5 6// 获取订单字符串用以 App 支付 7$orderStr = $response->getOrderString();
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )