电脑扫码支付应使用支付宝 EasySDK 的哪个接口?
支付老李
明确结论
如果要在电脑端展示二维码,让用户使用支付宝扫码付款,应调用 EasySDK 的当面付预创建接口:
Factory::payment()->faceToFace()->preCreate()
原来的 common()->create() 对应 alipay.trade.create,调用时需要通过 buyer_id 指定付款用户,不适用于先生成二维码,再由任意用户扫码付款的场景。
修改后的代码
删除买家支付宝用户 ID 参数,并将接口改为 faceToFace()->preCreate():
<?php
use Alipay\EasySDK\Kernel\Factory;
$result = Factory::payment()
->faceToFace()
->preCreate(
"iPhone6 16G",
"2020******5526001",
"88.88"
);
$qrCode = $result->qrCode;
三个参数依次是:
- 商品标题
subject - 商户订单号
out_trade_no - 订单金额
total_amount
$result->qrCode 返回二维码内容,通常是支付宝支付链接。网站还需要通过二维码生成组件,将这段内容渲染成二维码图片并展示给用户。
例如使用前端二维码组件时,可以先把 $qrCode 输出到页面,再生成二维码:
<div id="qrcode"></div>
<script>
const qrCodeContent = <?= json_encode($qrCode, JSON_UNESCAPED_SLASHES) ?>;
// 将 qrCodeContent 交给所使用的二维码组件进行渲染
</script>
为什么不能继续使用 common()->create()
原代码是:
$result = Factory::payment()
->common()
->create(
"iPhone6 16G",
"2020******5526001",
"88.88",
"2088******718920"
);
第四个参数 buyer_id 一般是支付宝用户 ID,不是扫码付款时临时填写的支付宝登录账号。调用这个接口前,商户必须已经知道付款用户的身份。
电脑端扫码支付通常按以下流程进行:
- 商户调用
preCreate()创建待支付订单。 - 支付宝返回
qrCode。 - 商户将返回内容生成二维码,并展示在电脑页面上。
- 用户使用支付宝扫描二维码。
- 商户通过异步通知或主动查询确认支付结果。
所以,不能只把第四个参数留空,而是要改用 faceToFace()->preCreate()。
注意事项
- 商户应用需要开通对应的当面付产品权限,否则接口可能返回权限不足或产品未开通等错误。
out_trade_no必须在商户侧保持唯一。轮询同一订单时,不要反复生成新的订单号。- 成功生成二维码不等于支付成功。最终支付状态应以支付宝异步通知或查询接口的结果为准。
- 接收异步通知时,必须验证签名,并核对商户身份、订单号、金额等字段。
- 如果需要跳转到支付宝电脑网站支付收银台,而不是自行展示二维码,应考虑使用
Factory::payment()->page()->pay()。这是电脑网站支付接口,与当面付预创建二维码属于不同的接入流程。
备注:内容仅供参考。
