当前位置:首页 > 编程技术 > 正文内容

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

yc8881年前 (2022-12-24)编程技术2351

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

  1. composer require yansongda/pay:^2.10

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

  1. composer require endroid/qr-code

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

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

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

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

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

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

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

  1. file_get_contents("php://input");

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

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

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


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

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

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

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

  1. /**
  2. * 手机网站支付
  3. */
  4. public function index()
  5. {
  6. $order = [
  7. 'out_trade_no' => time(),
  8. 'total_amount' => 1,
  9. 'subject' => '手机网站支付',
  10. ];
  11. return $this->alipay->wap($order)->send();
  12. }

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

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

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

本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://www.10zhan.com/biancheng/10274.html

标签: 微信小程序
分享给朋友:

“微信小程序中的支付宝支付” 的相关文章

【说站】Thymeleaf报错Error resolving template “XXX”

【说站】Thymeleaf报错Error resolving template “XXX”

修改了一下开源项目的目录结构访问突然报错Error resolving template “XXX”可能原因有如下三种:第一种可能:原因:在使用springboot的过程中,如果使用thymeleaf...

【说站】用一句话就可以去除宝塔面板操作上的二次验证

【说站】用一句话就可以去除宝塔面板操作上的二次验证

用过宝塔的朋友应该都会发现,现在宝塔面板有些鸡肋的功能,删除文件、删除数据库、删除站点等操作都需要做计算题!不仅加了几秒的延时等待,还无法跳过!这时候就会有朋友在想,如何去除宝塔面板的二次验证,此篇文...

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

今天在安装MySQL时出现starting the server失败,经过查询分析得出以下结论,记录一下操作步骤。原因分析:如果电脑是第一次安装MySQL,一般不会出现这样的报错。如下图所示。star...

【说站】vagrant实现linux虚拟机的安装并配置网络

【说站】vagrant实现linux虚拟机的安装并配置网络

一、VirtualBox的下载和安装1、下载VirtualBox官网下载:https://www.virtualbox.org/wiki/Downloads我的电脑是Windows的,所以下载Wind...

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

PDF中的墨迹注释(Ink Annotation),表现为徒手涂鸦式的形状;该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线。下面,通过C#程序代码介绍如何...

【说站】Java从resources读取文件内容的方法有哪些

【说站】Java从resources读取文件内容的方法有哪些

本文主要介绍的是java读取resource目录下文件的方法,比如这是你的src目录的结构├── main│ ├── java│ │ └── ...