雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

微信小程序中的支付宝支付

2024-09-19 18
1. 准备资料2. 创建网页应用3. 生成支付宝应用公钥4. 商家绑定网页应用5. 当面付: 买家扫描商家二维码完成支付6. 手机网站支付: 通过浏览器唤起支付宝客户端进行付款

1. 准备资料


沙箱环境: 用于开发时进行支付回调测试

支付宝开放平台: https://open.alipay.com , 使用支付宝扫码登录,进入控制台,找到沙箱环境

开放平台沙箱环境: https://open.alipay.com/platform/appDaily.htm?tab=info

沙箱账号: 用于登录沙箱版支付宝

2. 创建网页应用


登录支付宝开放平台: https://open.alipay.com , 进入控制台面板: https://open.alipay.com/platform/developerIndex.htm

在控制台中的我的应用中创建 网页&移动应用,并且选择支付接入

应用类型设置为 网页应用,其他信息按照提示填写即可

3. 生成支付宝应用公钥


点击接口加密方式中的 设置

加签内容配置

支付宝密钥在线生成器: https://miniu.alipay.com/keytool/create , 也可以下载软件版生成器生成密钥

将下图中的应用公钥复制并粘贴到上图中的 序号3: 公钥字符,进而得到支付宝应用公钥,开发者在调起支付时需要使用应用私钥和支付宝应用公钥。所以, 一定要将 应用私钥、应用公钥、支付宝应用公钥 保存好存起来

通过应用公钥获取到支付宝应用公钥,加签配置完成

4. 商家绑定网页应用


通过提示可得出结论: 要使用手机网站支付、当面付能力需要商家绑定此应用进行签约

进入支付宝商家中心: https://mrchportalweb.alipay.com , 在账号中心中找到 APPID 绑定,点击 添加绑定

输入支付宝开发平台网页应用的 APPID,点击 下一步 完成绑定

绑定此应用的商家如果已经签约该能力,应用的能力名称对应的状态直接就是 已生效

如果商家没有签约的话,可以在商家中心-产品中心进行签约, 签约成功后网页应用的状态自动变为 已签约

5. 当面付: 买家扫描商家二维码完成支付


技术栈: ThinkPHP6.0 + yansongda/pay=2.* + endroid/qr-code

使用 yansongda/pay 扩展包调用支付宝扫码支付接口

获取扫码支付URL地址, 例如: https://qr.alipay.com/bax01214wuzcetwrql5700a8

composer require yansongda/pay:^2.10

使用 endroid/qr-code 扩展包将支付宝接口返回的URL地址转为二维码 (收款码)

composer require endroid/qr-code

查看扫码支付章节: https://pay.yansongda.cn/docs/v2/alipay/pay.html

在构造方法中初始化配置参数,并且生成支付宝功能操作实例: $alipay

public function __construct(){    $config = [        'app_id'         => '',      // 应用appid        'notify_url'     => '',      // 异步通知地址        'ali_public_key' => '',      // 支付宝应用公钥        'private_key'    => '',      // 应用私钥 加密方式: **RSA2**          'mode'           => 'dev',   // 设置此参数,将进入沙箱模式;省略该参数,进入正式环境    ];    $this->alipay = \Yansongda\Pay\Pay::alipay($config);}

$qrcode 是一个 URL 地址,根据此地址生成一张二维码 $image, 生成商家收款码,让用户使用支付宝扫码支付

$order = [    'out_trade_no' => time(),    // 商家订单号    'total_amount' => 1,         // 订单金额,单位:元    'subject'      => '购买商品', // 订单备注];try {    // 应用 appid 配置错误时会抛出异常    $qrcode = $this->alipay->scan($order)->qr_code;} catch (\Exception $e) {    // 异常处理 记录日志 ...    // $e->getMessage()}$image = \Qrcode::generate($qrcode);echo '<img src="' . $image . '">';

异步通知地址: 当用户使用支付宝支付成功后,支付宝会向配置的 notify_url 发送请求,并携带一些参数

在 ThinkPHP 6.0 中可以通过 input() 来获取这些参数,或通过以下函数获取

file_get_contents("php://input");

但是实际开发中要用扩展包提供的方式,因为它帮助我们完成了验签的操作,可以更好的处理回调逻辑

/** * 异步通知地址 */public function notify(){    try {        $data = $this->alipay->verify(); // 是的,验签就这么简单!        // 请自行对 trade_status 进行判断及其它逻辑进行判断        // 只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。        // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;        // 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);        // 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方        // 4、验证app_id是否为该商户本身。        // 5、其它业务逻辑情况        if (in_array($data->trade_status, ['TRADE_SUCCESS', 'TRADE_FINISHED'], true)) {            // 业务逻辑处理 修改订单状态        }    } catch (\Exception $e) {        // $e->getMessage();    }    return $this->alipay->success()->send();}

6. 手机网站支付: 通过浏览器唤起支付宝客户端进行付款


在构造方法中初始化配置并且获取操作实例

public function __construct(){    $config = [        'app_id'         => '',      // 应用appid        'notify_url'     => '',      // 异步通知地址        'return_url'     => '',      // 回调地址        'ali_public_key' => '',      // 支付宝应用公钥        'private_key'    => '',      // 应用私钥 加密方式: **RSA2**          'mode'           => 'dev',   // 设置此参数,将进入沙箱模式;省略该参数,进入正式环境    ];    $this->alipay = \Yansongda\Pay\Pay::alipay($config);}

在小程序中可以生成一个 URL 链接地址,让用户复制链接至浏览器进行支付

这个链接地址就是调用手机网站支付的控制器方法入口,比如: https://www.itqaq.com/h5_pay/index

/** * 手机网站支付 */public function index(){    $order = [        'out_trade_no' => time(),        'total_amount' => 1,        'subject'      => '手机网站支付',    ];    return $this->alipay->wap($order)->send();}

访问上面的 URL 链接地址,会自动重定向到以下页面,如下图所示,提供了两种支付方式:

1、 使用支付宝 APP 付款 (拉起支付宝客户端进行付款) 2、 继续浏览器付款 (登录支付宝账号进行付款)

支付成功后,异步通知同扫码支付,点击 已完成付款 会自动重定向到 return_url 地址,可在页面中放张支付成功的图片

更新于:20天前
赞一波!

文章评论

评论问答