1、目录

  • Flutter 导入 tobias SDK
  • 支付宝后台配置
  • Node.js 配置
  • Flutter 调起支付

2、导入 tobias SDK

在fulutter —- pubspec.yaml 文件中新增

  1. dependencies:
  2. flutter_test:
  3. sdk: flutter
  4. tobias: ^2.1.2+1

3、支付宝后台设置

支付宝开放平台
支付宝商家中心

  • 在商家中心中签约开通 APP支付

image.png

  • 在开放平台中创建应用
  • 在创建的应用中 添加APP支付能力

image.png

image.png

  • 在应用信息中 设置回调地址、接口加签方式、应用网关

  • 加签设置 将应用公钥复制进去

image.png

4、Node.js 后台配置

①:在项目中引入 alipay-sdk
②:项目配置

  1. const AlipaySdk = require('alipay-sdk').default
  2. const ali = new AlipaySdk({
  3. appId: '应用ID',
  4. notifyUrl: '回调地址',
  5. privateKey: '私钥',
  6. alipayPublicKey: '公钥',
  7. signType: 'RSA2',
  8. gateway: 'https://openapi.alipay.com/gateway.do'// 网关 固定
  9. });
  10. module.exports = {
  11. ali
  12. }

image.png

③:接口设置:

支付宝文档

  1. const alipay = require('../utils/alipay')
  2. const AlipayFormData = require('alipay-sdk/lib/form').default
  3. // 下单接口
  4. async aliPay(ctx) {
  5. const { platform, openid, title } = ctx.request.body
  6. const out_trade_no = utils.getDate() + Math.random().toString().substring(2, 10)
  7. const formData = new AlipayFormData();
  8. const price = '0.01' // 价格
  9. formData.setMethod('get');
  10. formData.addField('notify_url', '回调地址');
  11. formData.addField('bizContent', {
  12. outTradeNo: out_trade_no,// 商家内部订单号
  13. productCode: "FAST_INSTANT_TRADE_PAY",// 固定
  14. totalAmount: price,
  15. subject: '主题', //
  16. body: "说明"
  17. });
  18. const result = await alipay.ali.exec(
  19. 'alipay.trade.app.pay', // APP支付 alipay.trade.page.pay--网页支付
  20. {},
  21. { formData: formData },
  22. );
  23. // sdk返回的是一个地址 前端app需要的参数是url地址的后面参数
  24. const search = new URL(result).search
  25. ctx.body = search.substring(1) // 返回地址到前端
  26. },
  27. // 回调接口
  28. async aliPayCallBack(ctx) {
  29. const { out_trade_no, trade_no } = ctx.request.body
  30. }

5、Flutter前端调起使用

  1. void aliPay() async {
  2. String openid = await Token();
  3. final data = await Dio().post('服务器请求地址');
  4. Map result = await tobias.aliPay(data.toString(), evn: AliPayEvn.ONLINE);//evn 固定参数
  5. if (result['resultStatus'] == "9000") { // 支付结果回调
  6. showToast('支付成功!');
  7. } else {
  8. showToast('支付失败!');
  9. }
  10. }

6、结语

至此在Flutter中接入支付宝支付已经完成了。

在接入的过程中,踩了许多的坑,阿里的sdk和flutter的sdk描写的都不够详细,所以在此记录一下,希望能帮助到你!