写本文章的目的是为了记录工作中遇到的问题,方便以后遇到可以迅速解决问题

H5手机网站接入支付宝的支付接口,推荐使用支付宝提供的SDK来快速开发

我使用的是SDK开发

引用命名空间

using Aop.Api;
using Aop.Api.Request;
using Aop.Api.Response;
using Aop.Api.Util;

首页需要定义一些常量

 static string serverUrl = "https://openapi.alipaydev.com/gateway.do";
static string app_id = "**"; //开发者的应用ID
static string format = "JSON";
static string charset = "utf-8";
static string sign_type = "RSA2"; //签名格式
static string version = "1.0";
string UID = "2088102169707816";//卖家支付宝账户号
//商户私钥
static string merchant_private_key = "***";
//支付宝公钥
static string alipay_public_key = "***";

这里的app_id,merchant_private_key,alipay_public_key 我就没有列出来了,获取的方法需要自己去支付宝平台完成一些操作进行获取

在用户点击网站付款时,我们需要唤醒支付宝,来进行支付

public string H5RequestPayWay(OrderPO order)
{
IAopClient client = new DefaultAopClient(serverUrl, app_id, merchant_private_key, format, version, sign_type, alipay_public_key, charset, false);
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
string address= "http://m." + PathLogic1.RootDomain;
request.SetReturnUrl(address+ "/WebPay/AlipayPayResult");//同步请求
request.SetNotifyUrl(address + "/WebPay/AsyncPay");//异步请求
var lstDetail = Context.Data.OrderDetail.Where(x => x.OrderNo == order.OrderNo).ToSelectList(x=>new { x.SkuName});
StringBuilder sb = new StringBuilder();
for (int i = 0; i < lstDetail.Count(); i++)
{
sb.Append(lstDetail[i].SkuName + ",");
}
request.BizContent = "{" +
"\"body\":\""+sb.ToString().Substring(0,sb.Length-1)+"\"," +
"\"subject\":\"袋鼠巴巴商品支付\"," +
"\"out_trade_no\":\""+order.OrderNo+"\"," +
"\"timeout_express\":\"90m\"," +
"\"total_amount\":"+(order.TotalAmount.Value+order.TotalFreight.Value)+"," +
"\"product_code\":\"QUICK_WAP_PAY\"" +
" }";//这里填写一些发送给支付宝的一些参数 AlipayTradeWapPayResponse response = client.pageExecute(request);
return response.Body;//这里会发送一个表单输出到页面中
}

具体发送给支付宝的参数,自行去查看

执行上面方法后,买家输入自己的支付宝账号密码进行支付,支付成功的结果,支付宝会以post的方式异步请求你的SetNotifyUrl的地址

这个SetNotifyUrl的地址必须要外网可以访问,支付宝的请求才能进来

买家支付成功,商家修改订单状态和数据库的操作,都在异步请求中执行

同步请求

  public ActionResult AlipayPayResult()
{
ViewBag.result = "success";
return View("PayResult");
}
         /// <summary>
        /// 验证通知数据的正确性
        /// </summary>
        /// <param name="out_trade_no"></param>
        /// <param name="total_amount"></param>
        /// <param name="seller_id"></param>
        /// <returns></returns>
private SortedDictionary<string, string> GetRequestPost()
{
int i = 0;
SortedDictionary<string, string> sArray = new SortedDictionary<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;
}
  /// <summary>
/// 验签
/// </summary>
/// <param name="inputPara"></param>
/// <returns></returns>
public Boolean Verify(SortedDictionary<string, string> inputPara)
{
Dictionary<string, string> sPara = new Dictionary<string, string>();
Boolean verifyResult = AlipaySignature.RSACheckV1(inputPara, alipay_public_key, charset,sign_type,false);
return verifyResult;
}

异步请求:

 [HttpPost]
public void AsyncPay()
{
SortedDictionary<string, string> sPara = GetRequestPost();//将post请求过来的参数传化为SortedDictionary
if (sPara.Count > 0)
{
AlipayTradeWayPayServer pay = new AlipayTradeWayPayServer();
Boolean VerifyResult = pay.Verify(sPara);//验签if (VerifyResult)
{
try
{
//商户订单号
string out_trade_no = Request.Form["out_trade_no"];
//支付宝交易号
string trade_no = Request.Form["trade_no"];
//支付金额
decimal total_amount = Request.Form["total_amount"].ConvertType(Decimal.Zero);
//实收金额
//decimal receipt_amount = Request.Form["receipt_amount"].ConvertType(Decimal.Zero);
//交易状态
string trade_status = Request.Form["trade_status"];
//卖家支付宝账号
string seller_id = Request.Form["seller_id"]; //商品描述
string body = Request.Form["body"];
//交易创建时间
DateTime gmt_create = DateTime.Parse(Request.Form["gmt_create"]);
//交易付款时间
DateTime gmt_payment = DateTime.Parse(Request.Form["gmt_payment"]);
string appid = Request.Form["app_id"];
WriteError("验证参数开始");
Boolean DataValidity = pay.CheckInform(out_trade_no, total_amount, seller_id, appid);//商家判断参数时候是否匹配if (DataValidity)
{
if (Request.Form["trade_status"] == "TRADE_FINISHED")
{
AlipayWayPayPO model = CreateAlipayWayPay(out_trade_no, trade_no, trade_status, gmt_create, gmt_payment);
pay.PaySuccess(out_trade_no, model);//修改订单
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
}
else if (Request.Form["trade_status"] == "TRADE_SUCCESS")
{
AlipayWayPayPO model = CreateAlipayWayPay(out_trade_no, trade_no, trade_status, gmt_create, gmt_payment);
pay.PaySuccess(out_trade_no, model);//修改订单
//注意:
//付款完成后,支付宝系统发送该交易状态通知
}
else
{ } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— Response.Write("success"); //请不要修改或删除 /////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
catch (Exception ex)
{ }
}
else//验证失败
{
Response.Write("fail");
}
}
else
{
Response.Write("无通知参数");
}
}

H5网站接入支付宝的支付接口的更多相关文章

  1. 支付宝WAP支付接口开发(Node/Coffee语言)

    此博客不更新很久了, 更新的文档在这, 有兴趣到这里围观: http://neutra.github.io/2013/%E6%94%AF%E4%BB%98%E5%AE%9DWAP%E6%94%AF%E ...

  2. php支付宝在线支付接口开发教程【转】

    php支付宝在线支付接口开发教程 这篇文章主要为大家详细介绍了php支付宝在线支付接口开发教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下   1.什么是第三方支付 所谓第三方支付,就是一些和各 ...

  3. 支付宝WAP支付接口开发

    支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...

  4. 【转】支付宝WAP支付接口开发

    支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...

  5. 支付宝php支付接口说明

    直接把该代码放到PHP服务器下,直接访问index.php.1.文件列表: alipay_config.php    (基本参数配置页面,填写商家的支付宝安全校验码,合作id,支付宝帐号等内容)ind ...

  6. Django对接支付宝Alipay支付接口

    最新博客更新见我的个人主页: https://xzajyjs.cn 我们在使用Django构建网站时常需要对接第三方支付平台的支付接口,这里就以支付宝为例(其他平台大同小异),使用支付宝开放平台的沙箱 ...

  7. 别无分号只此一家,Python3接入支付宝身份认证接口( alipay.user.certify)体系(2021年最新攻略)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_184 目前国内身份认证体系做的比较不错的大抵就是支付宝和微信两家了,支付宝的身份验证基于支付宝app的实人认证能力,采用多因子认证 ...

  8. phpt5支付宝登陆支付接口解析

    先看效果图 下面的源码来源网络,自己对照修改. 放入一个插件库中,方便管理 创建支付类 1.发起支付 public function init() { $order_id = $_REQUEST['o ...

  9. H5 网站支付宝支付(前端部分)包含微信浏览器中的处理方法。

    手机网站唤起支付宝支付: H5 网站实现支付宝支付是一个很常见的需求: 实现方式主要是在后台配置和预支付, 前端需要做的就是唤起 支付宝App 然后就可以输入密码支付. 这个其实难度很低, 主要就是在 ...

随机推荐

  1. edgex简述

    一.概述 Edgex foundry是一个Linux 基金会运营的开源边缘计算物联网软件框架项目,该项目的核心是基于与硬件和操作系统完全无关的参考软件平台建立的互操作框架,使能即插即用的组件生态系统, ...

  2. atoi()和itoa()函数详解以及C语言实现

    atoi()函数 atoi()原型:  int atoi(const char *str ); 函数功能:把字符串转换成整型数. 参数str:要进行转换的字符串 返回值:每个函数返回 int 值,此值 ...

  3. java操作redis(jedis)常用方法示例

    说明:redis命令和jedis方法名基本是一一对应的 Redis常用命令1 连接操作命令 ● quit:关闭连接(connection) ● auth:简单密码认证 ● help cmd: 查看cm ...

  4. 2013.6.26 - OpenNER第六天

    今例会的时候看CRF,突然感觉到ANN模型可能没有问题了,问题出在评价函数,不能接过好就说好,或者说收敛方法有问题,并不是打得对就答得好.还有就是我们应该让他能够根据需要而自己产生问题,问我们,然后我 ...

  5. JAVA命名规范性总结

    一:命名规范 1.项目名全部小写2.包名全部小写 在新建一个包项目时可能会涉及到多层设计,每层的包名要遵循包名全部小写的规范,如图在一个功能的逐层上级的包名全部是小写的字符组成3.类名的命名要遵循首字 ...

  6. [算法竞赛][2018][蓝桥杯][LanqiaoCA]第九届蓝桥杯A组

    题目1 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 每项是前一项的一半,如果一共有20项,求这个和是多少,结果用分数表示出来.类似:3/2当然,这只是加了前2项 ...

  7. linux系统编程之进程(二)

    今天继续学习进程相关的东东,上节提到了,当fork()之后,子进程复制了父进程当中的大部分数据,其中对于打开的文件,如果父进程打开了,子进程则不需要打开了,是共享的,所以首先先来研究下共享文件这一块的 ...

  8. P2261 [CQOI2007]余数求和[整除分块]

    题目大意 给出正整数 n 和 k 计算 \(G(n, k)=k\ \bmod\ 1 + k\ \bmod\ 2 + k\ \bmod\ 3 + \cdots + k\ \bmod\ n\) 的值 其中 ...

  9. (三)WCF之契约

    自从我们接收ITOO项目之后,就必须跟WCF打交道,既然必须直面WCF,我就对WCF进行了研究(还不是很深入,是自己目前的理解).之前对WCF的一些基础知识进行了简单的介绍,本篇重点来介绍WCF的契约 ...

  10. 【Java】Unicode & UTF-8 & UTF-16 & UTF-32

    Unicode Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设 ...