后端 /

接入支付宝收款

AI 已经能替你写支付的代码了——你只要说一句「帮我接入支付宝」,购买按钮、生成订单、跳转到支付宝、收到到账通知后标记已付款,这些它都能写好。

但有一件事 AI 替不了你:支付宝的 APPID、密钥和收款账号,只能由你本人到支付宝开放平台去申请。这些信息决定「钱打给谁」,支付宝只认账号主人自己操作。

所以这篇文章不讲代码,只帮你做一件事:把支付宝那边的几项信息找齐、填对。剩下的交给 AI。

全程三步:

  1. 到支付宝开放平台拿四项信息(本文的主要篇幅)
  2. 把它们填进 Creght 的「后端 → 集成」
  3. 跟 AI 说一句话,它把页面接起来

开始之前

你需要一个已完成企业认证的支付宝账号,并且在支付宝开放平台签约了「电脑网站支付」。个人账号无法签约这个产品,这是支付宝的规定,没有绕过的办法。

目前支持电脑网站支付;手机网站支付、App 支付、当面付暂不支持。

第一步:到支付宝开放平台拿四项信息

登录 支付宝开放平台,进入用于收款的那个应用。要拿的四项分布在两个不同的页面,下面按页面分开讲。

1. APPID

在左侧「应用详情」页面顶部,一串以 2021 开头的数字,复制下来。

2. 应用私钥与支付宝公钥

点左侧开发设置,找到「开发信息」这一块,点第一行「接口加签方式(密钥/证书)」右侧的查看(还没配过就显示「设置」)。

支付宝开放平台的开发设置页面
开发设置 →「开发信息」:接口加签方式和接口内容加密方式都在这里,点右侧「查看」进去取密钥。

在这个页面上做三件事:

  • 支付宝开放平台开发助手 生成一对 RSA2 密钥,选密钥模式(不要选证书模式,暂不支持)。
  • 工具会给你两串:应用私钥自己留着(等下填进 Creght),应用公钥粘贴到这个页面上传
  • 上传成功后,同一个页面会显示一串支付宝公钥,复制它。

这一步最容易出错,因为前后一共出现了三串东西,名字还很像:

名称谁生成用途填到哪
应用私钥你(开发助手)给请求签名Creght 的「应用私钥」
应用公钥你(开发助手)让支付宝验证你的签名上传到支付宝,不填进 Creght
支付宝公钥支付宝让你验证支付宝的通知Creght 的「支付宝公钥」

顺便看一眼这个页面上的支付宝网关地址,正式环境就是 https://openapi.alipay.com/gateway.do,所以 Creght 里的「网关地址」留空即可。

3. AES 密钥(大多数人可以跳过)

只有「开发信息」第二行「接口内容加密方式」显示「已设置」时才需要它:点查看,复制那串 Base64。没设置过就跳过,后面的步骤都不受影响。

4. 收款账号 PID

这一项不在「开发设置」里,而在另一个页面:打开 合作伙伴身份页面 (或左侧密钥管理 → mapi 网关产品密钥),页面顶部的「合作伙伴身份(PID)」就是它,点复制

支付宝开放平台的合作伙伴身份页面
密钥管理 → mapi 网关产品密钥:顶部「合作伙伴身份(PID)」就是收款账号 PID。

它是一串以 2088 开头的数字,代表实际收款的账号。Creght 用它核对「这笔钱确实是打给你的」,所以必须和你实际收款的账号一致。

第二步:填进 Creght

打开编辑器的后端 → 集成,在「添加应用」里选支付宝,按下表填写:

字段填什么
名字自己看的名称。同一个网站接多份时用来区分,例如「主收款账号」
渠道 tag用来区分多份配置,默认 default 就够。只有两个收款账号才需要两个不同的 tag
应用私钥上一步自己留着的那串(不是应用公钥)
APPID上一步那串以 2021 开头的数字
收款账号 PID上一步那串以 2088 开头的数字
支付宝公钥支付宝给你的那串(不是你自己的应用公钥)
异步通知地址https://你的正式域名/func/alipay.notify,照着填,见下方说明
支付后返回地址可选。付款后跳回哪个页面,只影响体验
AES 密钥只有开了内容加密才填,大多数人留空
网关地址留空即正式环境。只有用沙箱测试才填沙箱网关

「异步通知地址」照着填就好,不用自己创建任何东西。一笔钱到没到账,只能由支付宝的服务器回调你的网站来告知(用户付完款跳回页面这件事不算凭据,因为那个页面谁都能直接打开)。/func/alipay.notify 是固定写法,AI 在第三步会替你把这个接收地址建好,所以你现在直接填上它即可。

域名要填你网站正式对外访问的那个——绑定的自定义域名,或者发布后 Creght 给你的正式域名,必须是 https。不要填预览域名,支付宝的线上通知发不到预览域名。以后换了域名,记得回来把这一格改掉。

点保存时,Creght 会真的调用一次支付宝来验证这套信息,一次验四件事:APPID 是否存在、应用私钥和你上传的应用公钥是否配对、支付宝公钥对不对、网关选得对不对。填错当场就报错,不用等到有客户付款才发现。

保存时报错了怎么办

报错里出现原因和处理
isv.invalid-signature应用私钥和上传给支付宝的应用公钥不是同一对。重新用开发助手生成一对,私钥填 Creght、公钥传支付宝
isv.invalid-app-idAPPID 填错,或者用了沙箱的 APPID 但没填沙箱网关
提到「支付宝公钥」验签失败「支付宝公钥」填成了自己的应用公钥。回开放平台复制支付宝显示的那一串
isv.decrypt-errorAES 密钥不对,或支付宝后台改过它
isv.insufficient-isv-permissions这个应用没签约「电脑网站支付」,去开放平台的产品签约里开通
「应用私钥格式不对」私钥内容不完整。PKCS#8 和 PKCS#1 都支持,带不带 BEGIN/END 头都行,但不能少字符或夹杂多余内容

第三步:让 AI 把页面接起来

保存成功之后,回到编辑器,跟 AI 说一句:

我已经集成了支付宝,帮我在页面上接入支付宝。

AI 会替你把余下的事做完:建好接收到账通知的地址、生成订单、把「购买」按钮连到支付宝、收到通知后标记已付款。如果你顺便说清楚要卖什么、付完款给什么,效果会更好,例如:

我已经集成了支付宝,帮我在课程详情页加一个「立即购买」按钮。付款成功后显示购买成功,并且我能在后台看到所有订单。

AI 写完之后要发布网站:支付宝只会把到账通知发到已发布的正式域名,没发布就收不到通知。以后每次改动和支付有关的代码,也都要重新发布一次。

AI 做完之后,确认这三点

这三点是收款的安全底线,AI 默认会处理,你也可以直接问它确认:

  • 价格由服务端的商品数据决定,不能由浏览器传上来——否则等于让顾客自己定价。
  • 只有验签通过的支付宝通知才算付款成功,用户跳回页面不算。
  • 同一笔订单的通知会重复到达,所以发货或开通权限要做到重复通知也只生效一次。

想让 AI 有更明确的参考,可以把这个链接一起发给它: 使用集成接入支付宝支付——那是写给开发者和 AI 看的代码文档,你不需要自己读。

上线前一定要真付一笔

支付宝提供沙箱环境,可以不动真钱走完整个流程。沙箱有自己独立的 APPID、密钥和网关地址,不能和正式环境混用:用沙箱就在「网关地址」里填沙箱网关,APPID 和密钥也都换成沙箱那一套。

但沙箱测通不等于正式环境能用。正式上线前,把某个商品价格临时改成 0.01 元,在正式域名上真实付一笔,确认网站收到了通知、订单变成已支付。这一步没有替代品。

常见问题

付款成功了,但网站没反应?按顺序查三件事:集成里的「异步通知地址」是不是已发布正式域名下的 https 地址;网站是不是已经发布(改完支付相关代码要重新发布);这个地址和 AI 实际创建的地址是否一致——直接问 AI「我的支付宝通知地址是什么」就能对上。

能接两个收款账号吗?可以。添加两份支付宝集成,给它们不同的渠道 tag,然后告诉 AI 哪个页面用哪个 tag 收款。注意同一个 tag 不能标在两份支付配置上——那会报错,因为订单和收款账号必须一一对应。

密钥会泄漏吗?不会。应用私钥只保存在服务端,签名和验签都由平台完成,网站代码、日志和浏览器都拿不到它。支付类集成也不允许把密钥暴露给代码,所以 AI 写出的代码里同样看不到你的密钥。

Render diagnostics