PAYATHON 2026

电脑扫码支付应使用支付宝 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,不是扫码付款时临时填写的支付宝登录账号。调用这个接口前,商户必须已经知道付款用户的身份。

电脑端扫码支付通常按以下流程进行:

  1. 商户调用 preCreate() 创建待支付订单。
  2. 支付宝返回 qrCode。
  3. 商户将返回内容生成二维码,并展示在电脑页面上。
  4. 用户使用支付宝扫描二维码。
  5. 商户通过异步通知或主动查询确认支付结果。

所以,不能只把第四个参数留空,而是要改用 faceToFace()->preCreate()。

注意事项

  • 商户应用需要开通对应的当面付产品权限,否则接口可能返回权限不足或产品未开通等错误。
  • out_trade_no 必须在商户侧保持唯一。轮询同一订单时,不要反复生成新的订单号。
  • 成功生成二维码不等于支付成功。最终支付状态应以支付宝异步通知或查询接口的结果为准。
  • 接收异步通知时,必须验证签名,并核对商户身份、订单号、金额等字段。
  • 如果需要跳转到支付宝电脑网站支付收银台,而不是自行展示二维码,应考虑使用 Factory::payment()->page()->pay()。这是电脑网站支付接口,与当面付预创建二维码属于不同的接入流程。

备注:内容仅供参考。