• Net Core 3 Mvc AliPay Demo


    AliPay - PC

    钻研了几天的Webpack, 这几天回归了我的本行.Net, 跟随大佬的脚步, 开始做上了支付宝的支付.

    创建项目

    首先创建一基于.Net Core3.0的MVC项目, 然后引用一下大佬写的支付类库Alipay.AopSdk.AspnetCore. 这一步很关键, 方法大佬都给你分装好了, 配置完了之后直接调用就行.

    注册框架

    .Net Core天生自带依赖注入, 要想在代码中直接使用注册的服务, 就需要在项目启动时注册该服务. 在Startup的ConfigureServices中添加如下代码:

    var alipayOptions = Configuration.GetSection("Alipay").Get<AlipayOptions>();
    services.AddAlipay(options => options.SetOption(alipayOptions));
    

    上述代码实际上是注册了AlipayOptions, 而这些配置参数来源于配置文件, 格式如下:

    {
      "Alipay": {
        "AlipayPublicKey": "",
        "AppId": "",
        "CharSet": "UTF-8",
        "Gatewayurl": "https://openapi.alipaydev.com/gateway.do",
        "PrivateKey": "",
        "SignType": "RSA2",
        "Uid": ""
      }
    }
    

    最简单的方法是你直接把它扔进appsettings.json, 而我采用了稍微复杂一点的方法, 注册自定义的配置文件alipay.json, 自定义配置文件不会自动加载, 需要在Program.cs中添加如下注册代码:

    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.ConfigureAppConfiguration(config =>
            {
                config.AddJsonFile("alipay.json");
            });
            webBuilder.UseStartup<Startup>();
        });
    

    书写代码

    上述都还只是准备工作, 这部分是代码, 新建一个PayController, 里面包含发起支付、订单查询、退款、退款查询、订单关闭五大功能, 每个功能包含一个Post的Action来接收前端传过来的参数, 和一个Get的Action+View来渲染界面, 具体代码请参照我的Gitee:

    https://gitee.com/jerryqi/netcore-practice/tree/master/AliPay

    实际上原理很简单, 其实就是给出一个简单的前端界面, 允许使用者自定义参数来调用API, 要写的简单的话, 就写一个Console把API调用一遍就行了, 但是这样不太直观. 总结来说, 就是前端传参数到后端, 后端封装成请求请求支付宝, 支付宝返回结果.

    开通账号

    做支付测试, 首先需要有一个测试账号啊, 我没有土豪到拿白花花的银子去做测试啊, 支付宝就有这一样一个沙箱测试环境, 相当于一个阉割版的支付宝, 里面拥有完整的支付功能, 在这个里面你可以随意给自己充钱, 并且随意花钱, 做一会真正的土豪. 地址:

    https://openhome.alipay.com/platform/appDaily.htm?tab=info

    打开之后, 你直接用自己的个人支付宝扫码登陆进去就算注册成功了, 登陆上去之后一次打开: 开发者中心->研发服务, 结下来就是各个参数的配置:

    沙箱应用

    在该选项卡需要配置RSA或者RSA2密钥, 生成工具可以使用AliPay推荐的-支付宝开放平台开发助手, 下载地址:

    https://docs.open.alipay.com/291/105971

    生成的应用公钥填入: RSA(SHA1)密钥, 填入完之后, 支付宝会相应的生成支付宝公钥. 在该选项卡需要记住以下几个参数:

    • 开发者助手生成的私钥
    • 支付宝生成的公钥
    • APPID

    此处还要下载一个沙箱测试专用的支付宝, 下载链接在该选项卡下方可以找到.

    沙箱账号

    打开沙箱账号选项卡, 里面提供了两个账号, 一个商家信息, 一个买家信息, 分别的作用是:

    商家信息

    这里面有个要用到的重要参数:

    • 商户UID

    买家信息

    这个信息是你上述步骤下载的沙箱版支付宝的登陆账号以及密码, 也是这里, 你可以随意给自己的账号充钱, 土豪一把.

    配置打通

    在开通账号的步骤中, 我提到了四个重要的参数, 对配置文件一次对好入座:

    • 需要注意的是我们使用支付宝开放平台开发助手生成的是RSA(SHA1)密钥, 因此SignType是RSA
    {
      "Alipay": {
        "AlipayPublicKey": "支付宝生成的公钥",
        "AppId": "APPID",
        "CharSet": "UTF-8",
        "Gatewayurl": "https://openapi.alipaydev.com/gateway.do",
        "PrivateKey": "开发者助手生成的私钥",
        "SignType": "RSA",
        "Uid": "商户UID"
      }
    }
    

    AliPay - Scan

    接续上一篇博客, 在PC的支付过程中, 是通过在PC端把相关支付参数携带并跳转到支付宝, 在支付宝的网页中形成付款二维码, 付款成功之后再跳转回来, 而在本文的扫码支付则是通过支付参数从支付宝获取一个支付唯一的Link, 之后将此Link在本地生成二维码, 从而实现扫码付.

    环境准备

    本Demo的环境沿用上一篇PC Pay的环境, Link:

    https://www.cnblogs.com/jerryqi/p/11771584.html

    在上一节的基础上, 首先使用nuget安装QRCoder, 该类库用于将文本信息转换为二维码.

    书写代码

    首先新建一个F2FPayController, 里面主要包含两个Action, Scan和ScanCodeGen, 前者用来显示View来提供一个表单供填写参数并显示支付二维码, 后者则用来接收前端传过来的参数, 通过调用相关API返回二维码, 具体代码请参照我的Gitee:

    https://gitee.com/jerryqi/netcore-practice/tree/master/AliPay

    完成之后, 启动应用, 你就可以放肆消费了.

  • 相关阅读:
    爸爸妈妈儿子女儿吃水果问题以及五个哲学家吃饭问题
    同步与互斥中的购票和退票问题的PV操作与实现
    创建react&ts&antd项目
    在POM配置Maven plugin提示错误“Plugin execution not covered by lifecycle configuration”的解决方案
    aws rds 储存空间占用 异常排查 存储空间占满
    Linux下clang、gcc、intel编译器最新版本安装笔记
    extern "C"与extern "C" { … }的差别
    gcc预处理指令之#pragma once
    指向类的成员变量的指针
    Java程序中使用SQLite总结
  • 原文地址:https://www.cnblogs.com/jerryqi/p/11771584.html
Copyright © 2020-2023  润新知