新版支付宝手机支付流程_C#版

简介: 新版支付宝手机支付流程_C#版

需要的Dll AopSdk.dll  在官方SDK中下载。

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.HXVXzB&treeId=54&articleId=103419&docType=1


官方文档:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.ukycyq&treeId=54&articleId=106370&docType=1


private static string APPID = "2017060507xxxxx";  //应用ID
private static string ALI_Public_key = "xxxxxxxxx";//支付宝公钥
private static string APP_Private_key = "xxxxxxxx”;//应用私钥(应用私钥注意用支付宝工具 secret_key_tools_RSA_win 转换成非JAVA语言版本)
///1.在服务端签名
public class CreatePayOrderInput
{
    public string Body { set; get; }
    public string Subject { set; get; }
    public string TotalAmount { set; get; }
    public string OutTradeNo { set; get; }
}
/// <summary>
/// 获取支付宝签名接口
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public ReturnNode CreatePayOrder(CreatePayOrderInput input)
{
    IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", APPID, APP_Private_key, "json", "1.0", "RSA2", ALI_Public_key, "UTF-8", false);
    //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay
    AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
    //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
    AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
    model.Body = input.Body;//"我是测试数据";
    model.Subject = input.Subject;//"1";
    model.TotalAmount = input.TotalAmount;//"0.01";
    model.OutTradeNo = input.OutTradeNo;//"20170704125896";
    model.ProductCode = "QUICK_MSECURITY_PAY";
    model.TimeoutExpress = "30m";
    request.SetBizModel(model);
    request.SetNotifyUrl("http://xxxxxx/shopapi/controllers/PayAliNotify.aspx");//回调地址
    //这里和普通的接口调用不同,使用的是sdkExecute
    AlipayTradeAppPayResponse response = client.SdkExecute(request);
    //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理
    return ReturnNode.ReturnSuccess(response.Body);
}
/2.支付异步通知服务器方法,可以用aspx页面做地址。
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace YFAPICommon.Controllers
{
    public partial class PayAliNotify : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Dictionary<string, string> param = GetRequestPost();
                  NotifyFunc(param);
            }
            catch (Exception ex)
            {
            }
        }
        /// 获取支付宝POST过来通知消息,并以“参数名=参数值”的形式组成数组
        /// request回来的信息组成的数组
        public Dictionary<string, string> GetRequestPost()
        {
            int i = 0;
            Dictionary<string, string> sArray = new Dictionary<string, string>();
            NameValueCollection coll;
            //Load Form variables into NameValueCollection variable.
            coll = Request.Form;
            // Get names of all forms into a string array.
            String[] requestItem = coll.AllKeys;
            for (i = 0; i < requestItem.Length; i++)
            {
                sArray.Add(requestItem[i], Request.Form[requestItem[i]]);
            }
            return sArray;
        }
    }
}
///3.回调签名验证
public class AliNotifyInput
{
    public string total_amount { set; get; }// = 2.00
    public string buyer_id { set; get; }// = 2088102116773037&
    public string body { set; get; }// = 大乐透2.1&
    public string trade_no { set; get; }//= 2016071921001003030200089909&
    public string refund_fee { set; get; }//= 0.00&
    public string notify_time { set; get; }//= 2016-07-19 14:10:49&
    public string subject { set; get; }//= 大乐透2.1&
    public string sign_type { set; get; }//= RSA2&
    public string charset { set; get; }//= utf-8&
    public string notify_type { set; get; }//= trade_status_sync&
    public string out_trade_no { set; get; }//= 0719141034-6418&
    public string gmt_close { set; get; }//= 2016-07-19 14:10:46&
    public string gmt_payment { set; get; }//= 2016-07-19 14:10:47&
    public string trade_status { set; get; }//= TRADE_SUCCESS&
    public string version { set; get; }//= 1.0&
    public string sign { set; get; }
    public string gmt_create { set; get; }//= 2016-07-19 14:10:44&
    public string app_id { set; get; }//= 2015102700040153&
    public string seller_id { set; get; }//= 2088102119685838&
    public string notify_id { set; get; }//= 4a91b7a78a503640467525113fb7d8bg8e
}
public void NotifyFunc(Dictionary<string, string> param)
{
    //校验签名
    bool flag = AlipaySignature.RSACheckV1(param, ALI_Public_key, "UTF-8", "RSA2", false);
    if (flag)
    {
        string json = JsonConvert.SerializeObject(param);
        AliNotifyInput input = JsonConvert.DeserializeObject<AliNotifyInput>(json);
        //校验APPID
        if (input.app_id == APPID)
        {
            //校验支付状态
            if (input.trade_status == "TRADE_SUCCESS" || input.trade_status == "TRADE_FINISHED")
            {
                int totalAmount = (int)(double.Parse(input.total_amount) * 100);
                OrderController controller = new OrderController();
                controller.PayOrder(input.out_trade_no, totalAmount, "Ali");
            }
        }
    }
}
相关文章
thinkphp6.0 集成Alipay 手机和电脑端支付的方法
第一步   下载 Alipay 的PHP SDK :https://docs.open.alipay.com/54/103419/ 第二步   解压下载都到的压缩包:   解压后得到的文件内容如图    第三步、上传得到的目录中的 aop 文件夹到 thinkphp 6.
6180 0
|
4月前
|
JavaScript NoSQL Redis
Vue中实现修改邮箱、手机号等流程的大致过程、验证码由后端的redis生成验证(版本1.0)
这篇文章记录了在Vue中实现修改手机号和邮箱的大致流程,包括使用过滤器部分隐藏展示的手机号和邮箱,以及通过点击触发路由跳转的便捷方式。文章还描述了旧号码和新号码验证的界面实现,其中验证码由后端生成并通过弹窗展示给用户,未来可以接入真正的手机验证码接口。此外,还提供了修改邮箱的页面效果截图,并强调了学习是一个永无止境的过程。
Vue中实现修改邮箱、手机号等流程的大致过程、验证码由后端的redis生成验证(版本1.0)
|
5月前
|
Web App开发
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
|
5月前
|
Web App开发 编解码
软件开发常见流程之兼容性和手机屏页面设计,PC端和移动端常见浏览器,国内的UC都是根据Webkit修改过来的内核,开发重点关注尺寸,常见移动端尺寸汇总,移动端,理想视口根据你设别的样式进行修改
软件开发常见流程之兼容性和手机屏页面设计,PC端和移动端常见浏览器,国内的UC都是根据Webkit修改过来的内核,开发重点关注尺寸,常见移动端尺寸汇总,移动端,理想视口根据你设别的样式进行修改
|
7月前
|
小程序 JavaScript API
微信小程序获取手机号流程以及用到的API
微信小程序获取手机号流程以及用到的API
347 0
|
缓存 监控 数据挖掘
手机期货量化交易软件开发基本概念和流程说明[附伪代码示例分析]
手机期货量化交易软件开发基本概念和流程说明[附伪代码示例分析]
|
缓存 小程序 Java
微信支付宝双端兼容获取手机号头像昵称
微信支付宝双端兼容获取手机号头像昵称
212 0
|
测试技术 Shell Linux
Mac电脑下通过 ada + atx-agent 连接安卓手机流程
Mac电脑下通过 ada + atx-agent 连接安卓手机流程
432 0
使用钉钉手机APP扫一扫注册阿里云账号全流程
阿小云想要购买一台阿里云服务器,需要注册一个阿里云账号,听说使用钉钉APP扫一扫注册可以免去实名认证步骤,分享一篇使用钉钉手机APP扫一扫注册阿里云账号教程:
406 1
使用钉钉手机APP扫一扫注册阿里云账号全流程