第三方支付接口技术对接实现及样例..

合集下载

第三方支付平台支付接口及回调接口开发

第三方支付平台支付接口及回调接口开发

第三⽅⽀付平台⽀付接⼝及回调接⼝开发作为开放式的B/S架构程序,⽆论所属电商,⾦融,机械制造,企业OA,ERP,CRM,CMS等等⾏业或系统中,第三⽅⽀付以及银联⽀付的业务⼀定是客户关⼼所在,也是保证客户系统盈利运营的⼀个重要保障。

通常这种B2C或者C2C系统的开发,商户⽤户所关注的⽀付平台⼤多离不开“阿⾥⽀付宝,快钱,腾讯财付通,易宝⽀付这种第三⽅⽀付平台以及中国银联UnionPay....等等”这些⽅式。

最近某项⽬中涉及到⽀付的模块与涉及流程,在此和⼤家分享⼀下。

1,名词释义商户⽹站:⽐如淘宝,聚美,唯品会这种B2C/C2C的⽹站及后台的管理系统,统称为商户⽹站;主要负责对买家订单数据的封装,加密,及⽀付平台回调的订单处理。

⽀付平台:我们需要开发的⽀付平台,⽀付接⼝,⽀付模拟的Servlet,暴露出来的WebService接⼝url等;主要负责对买家请求来的加密后的订单数据进⾏解密,构造请求的URL,拼接参数,对Sign进⾏加密,对⽀付机构异步(或同步)请求回调的数据进⾏封装,解密回传给商户⽹站。

⽀付机构:⽐如阿⾥⽀付宝,快钱,腾讯财付通,易宝⽀付这种第三⽅⽀付平台等⽀付机构。

Sign:⽀付机构为商户分配的⼀把“密钥”与”合作者ID“同时分配,⽤做调⽤Base64,MD5等加密算法在加密解密时的⼀种私钥,通常与此相关联的还有signType,就是加密⽅式。

回调:对上次请求端request中的url或指定的url进⾏http请求,或https请求⽀付平台请求,响应,及回调流程图:2,业务流设计(本⽂只介绍alipay的即时到账接⼝:"create_direct_pay_by_user")2.1 商户⽹站对数据封装加密,调⽤⽀付接⼝:2.1.1)商户⽹站后台对买家的订单进⾏封装,插⼊商户⽹站db中的订单表(⽐如:xxx_order);PayReturnVovo = new PayReturnVo();vo.setOrderId("kuaiqian00232");vo.setOrderAmount("20");vo.setOrderTime("20140504121020");vo.setProductName("3M⽹线,送⽔晶头");vo.setProductId("2213229319378");vo.setProductNum("2");vo.setPayType("00");*/// 把模拟的表单数据转成JsonStringorderJson= PaymentJsonUtil.beanToJson(vo);// 通过db获取商家key密钥Stringkey = dao.getKeyByUserId(userId);// 根据key使⽤base64加密算法对订单信息进⾏加密StringSignedJson = CryptUtil.encryptBase64Des(orderJson, key);2.1.2)于此同时调⽤dao层查询买家⽤户平台账户余额,并进⾏锁表:在SQL的select后加⼊ forupdate wait n(最好为1-5秒,此处的数值为httpclient请求超时时长)为防⽌订单被多⽤户修改。

第三方支付接口技术对接实现及样例

第三方支付接口技术对接实现及样例

第三方支付接口技术对接实现及样例随着电子商务和移动支付的蓬勃发展,第三方支付成为了一种便捷、安全的支付方式。

第三方支付接口技术对接实现是指将第三方支付平台的支付功能引入到自己的平台中,使用户可以直接在自己的平台上完成支付操作。

本文将介绍第三方支付接口技术对接的实现步骤,并提供一个简单的样例演示。

一.实现步骤1. 选择第三方支付平台2. 获取商户账号和密钥注册第三方支付平台的商户账号,并获取对应的商户密钥。

商户账号和密钥用于身份验证和加密等操作。

3. 接口文档阅读仔细阅读第三方支付平台提供的接口文档,了解接口的功能和使用方式。

接口文档中通常包含接口的请求参数、返回参数、加密方式、签名算法等关键信息。

4. 接口参数配置根据接口文档配置请求参数。

一般需要配置商户账号、订单号、金额、支付方式等基本参数。

5. 发起支付请求根据接口文档的要求,利用开发语言发送请求到第三方支付平台。

请求可以使用HTTP或者HTTPS协议进行传输。

请求中需要包含商户账号、密钥等身份验证参数,同时还需要传递订单信息和支付金额等相关参数。

6. 处理支付结果7. 订单查询和退款如果需要查询订单状态或者发起退款操作,可以通过调用第三方支付平台的查询接口或者退款接口实现。

二.样例演示假设我们选择支付宝作为第三方支付平台,演示如何使用支付宝支付接口。

1. 注册支付宝商户账号并获取密钥。

2. 阅读支付宝开放平台的接口文档。

3. 配置请求参数。

例如,在发起支付请求时,我们需要配置商户账号、订单号、金额等参数。

4. 调用支付宝的支付接口,向支付宝传递请求参数。

```javapublic class AlipayDemopublic static void main(String[] args)//配置请求参数String appId = "YOUR_APP_ID";String merchantId = "YOUR_MERCHANT_ID"; double amount = 100.0;//构造请求URL//发起支付请求String result = sendRequest(url);//处理支付结果if (result.equals("success"))System.out.println("支付成功!");} elseSystem.out.println("支付失败!");}}private static String sendRequest(String url) //发送HTTP请求,并获取服务器响应//TODO:发送HTTP请求的代码...return "success"; // 假设返回结果为成功}```以上代码演示了如何使用支付宝支付接口,其中`sendRequest`方法需要根据具体的编程语言和第三方支付平台的要求实现。

支付接口

支付接口

1 支付接口定义及实现图1 第三方支付接口示意图(来源:本研究整理)1.1支付接口定义从技术角度讲,支付接口就是第三方支付平台提供的一段代码,商务需要将该代码配置到自己的服务器上去,并设置一些相关的接口参数。

那么当客户选择使用第三方支付时,支付信息就会转到第三方支付平台的服务器上运行。

具体来看,使用支付接口完成的支付流程如下:(1)持卡客户(买方)选购好商品后,网上商城(卖方)为持卡客户生成订单;(2)持卡客户和第三方服务器建立连接,将账号信息与订单信息发给第三方;(3)第三方服务器要求顾客进行订单确认,收到确认信息后与所支持的银行进行支付交易处理,得到银行的支付确认后授权给商家可以发货;(4)网上商城通知持卡客户发货信息。

图2 第三方支付流程图(来源:本研究整理)1.2支付接口实现1.2.1实现条件要实现接口,需要有一个网站、支付宝账户、支付宝的合作身份ID、安全校验码等。

为了方便电子商务网站的集成,各支付网关在正式成为商家用户后,可下载ASP、.NET、JAVA等针对不同服务器类型的商务网站的集成接口程序。

本文将分别以各种有代表性的第三方支付平台为例说明与JSP类型的电子商务网站的接口应用方法。

值得注意的是,参数简单的传过去是不行的,这些参数是经过了按一定排列顺序并区分大小写(参数为空也要传递)再加上一个MD5字符串。

即使参数值为空字符串和没有传值也是有区别。

1.2.2实现过程比如现在有一个页面要向第三方支付平台传递一个价格跟商品信息,则可以通过POST和GET两种方式传递进去。

当第三方支付平台接收参数的同时,它还要判断身份,所以传递的时候身份信息也要一起传过去。

当身份确认以后,第三方支付平台就开始处理商品信息跟价格信息了。

无论消费者是否支付成功,它都会返回一个信息给消费者,这个返回页面就是第三方支付平台之前设置好了的,在这个返回页面里面写入相关的支付数据信息,这样就完成了一个简单支付接口。

第三方接口(外部api)对接流程及规范

第三方接口(外部api)对接流程及规范

第三方接口(外部api)对接流程及规范下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!第三方接口(外部API)对接流程与规范详解在现代软件开发中,第三方接口(External API,也称为外部API)的使用已经变得非常普遍。

三分钟python搭建支付宝三方支付

三分钟python搭建支付宝三方支付

三分钟python搭建⽀付宝三⽅⽀付⽬录为什么使⽤三⽅⽀付?⽀付宝⽀付的流程配置流程1、获取APPID2、在线⽣成密钥3、获取公钥python项⽬中集成⽀付宝总结为什么使⽤三⽅⽀付? 再没有三⽅⽀付平台之前,⽤户发起⽀付请求的时候,⽤户要去和银⾏签约(转账),特别的不⽅便,为了解决这些问题,就有了三⽅⽀付,三⽅平台去完成签约,给⽤户节省时间。

⽀付宝⽀付的流程 商户拿到⽀付宝的公钥、⾃⼰的私钥(私钥加密、公钥解密),⽤私钥请求⽀付宝,⽀付宝解密、验签、进⾏⽀付处理,⽀付宝将处理的返回值传给商户,当⽀付成功后,返还给商户订单号、⾦额、时间戳等消息,⽀付失败后同样给商户反馈结果。

配置流程1、获取APPID登录⽀付宝开放平台–>点击控制台点击沙箱(复制APPID)2、在线⽣成密钥点击⽂档,找到开发助⼿,点击在线加密。

3、获取公钥点击应⽤公钥现在已经拿到了需要的公钥。

python项⽬中集成⽀付宝构建⽀付类from datetime import datetimefrom Crypto.PublicKey import RSAfrom Crypto.Signature import PKCS1_v1_5from Crypto.Hash import SHA256from urllib.parse import quote_plusfrom base64 import decodebytes, encodebytesimport jsonclass AliPay:"""⽀付宝⽀付接⼝(PC端⽀付接⼝)"""def __init__(self, appid, app_notify_url, app_private_key_path,alipay_public_key_path, return_url, debug=False):self.appid = appidself.app_notify_url = app_notify_urlself.app_private_key_path = app_private_key_pathself.app_private_key = Noneself.return_url = return_urlwith open(self.app_private_key_path) as fp:self.app_private_key = RSA.importKey(fp.read())self.alipay_public_key_path = alipay_public_key_pathwith open(self.alipay_public_key_path) as fp:self.alipay_public_key = RSA.importKey(fp.read())if debug is True:self.__gateway = "https:///gateway.do"else:self.__gateway = "https:///gateway.do"def direct_pay(self, subject, out_trade_no, total_amount, return_url=None, **kwargs): biz_content = {"subject": subject,"out_trade_no": out_trade_no,"total_amount": total_amount,"product_code": "FAST_INSTANT_TRADE_PAY",}biz_content.update(kwargs)data = self.build_body("alipay.trade.page.pay", biz_content, self.return_url)return self.sign_data(data)def build_body(self, method, biz_content, return_url=None):data = {"app_id": self.appid,"method": method,"charset": "utf-8","sign_type": "RSA2","timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"version": "1.0","biz_content": biz_content}def sign_data(self, data):data.pop("sign", None)unsigned_items = self.ordered_data(data)unsigned_string = "&".join("{0}={1}".format(k, v) for k, v in unsigned_items)sign = self.sign(unsigned_string.encode("utf-8"))quoted_string = "&".join("{0}={1}".format(k, quote_plus(v)) for k, v in unsigned_items)signed_string = quoted_string + "&sign=" + quote_plus(sign)return signed_stringdef ordered_data(self, data):complex_keys = []for key, value in data.items():if isinstance(value, dict):complex_keys.append(key)for key in complex_keys:data[key] = json.dumps(data[key], separators=(',', ':'))return sorted([(k, v) for k, v in data.items()])def sign(self, unsigned_string):key = self.app_private_keysigner = PKCS1_v1_5.new(key)signature = signer.sign(SHA256.new(unsigned_string))sign = encodebytes(signature).decode("utf8").replace("\n", "")return signdef _verify(self, raw_content, signature):key = self.alipay_public_keysigner = PKCS1_v1_5.new(key)digest = SHA256.new()digest.update(raw_content.encode("utf8"))if signer.verify(digest, decodebytes(signature.encode("utf8"))):return Truereturn Falsedef verify(self, data, signature):if "sign_type" in data:data.pop("sign_type")unsigned_items = self.ordered_data(data)message = "&".join(u"{}={}".format(k, v) for k, v in unsigned_items)return self._verify(message, signature)实例化类def init_alipay():# 初始化Alipayalipay = AliPay(appid="appid",app_notify_url="回调地址",return_url="回调地址",app_private_key_path="私钥相对路径",alipay_public_key_path="公钥相对路径",debug=True # ⽀付环境)return alipayAPIasync def get(self):alipay = init_alipay()# 传⼀个标题订单号订单价格params = alipay.direct_pay("三⽅⼴告平台", order_no, money)url = f"https:///gateway.do?{params}"return self.write(ret_json(url))# 构建⼀个回调地址,⽤于⽀付成功后回调,在回调地址中可以获取订单号(out_trade_no)、⾦额(total_amount)、时间戳(timestamp),然后进⾏处理业务逻辑。

移动应用开发技术中的支付与第三方接口集成方法(一)

移动应用开发技术中的支付与第三方接口集成方法(一)

移动应用开发技术中的支付与第三方接口集成方法随着移动互联网的快速发展,移动应用的使用已经成为人们日常生活中不可或缺的一部分。

而其中最常见的功能之一就是支付功能,通过移动应用可以方便地实现在线支付,为用户提供便捷的购物体验。

而在移动应用开发过程中,集成第三方支付接口是实现移动支付功能的常见做法。

一、第三方支付接口的选择与集成在选择第三方支付接口时,应先调研市场上的主流支付平台,根据自身应用的需求和业务模式选择最适合的支付接口。

例如,支付宝和微信支付是目前国内最常用的两个支付平台,它们具有较广泛的用户群体和支付场景。

在集成第三方支付接口时,首先需要申请支付接口的开发者账号,并获得相应的API文档和密钥。

开发者需要按照API文档的要求,调用接口完成支付的各个环节。

通常情况下,支付接口提供了统一的SDK (软件开发工具包)或API(应用程序编程接口),开发者可根据自身情况选择合适的方式进行集成。

二、移动支付系统的设计与开发在进行移动支付系统设计时,需要考虑以下几个方面的因素:1. 用户界面设计:支付界面的设计要简洁明了,让用户一目了然地完成支付操作,避免过多无关的信息干扰用户。

2. 安全性设计:移动支付涉及用户的财产安全,因此支付系统的安全性设计十分重要。

开发者可以采用数据加密、访问控制等安全措施,防止用户信息被盗。

3. 异常处理机制:支付过程中可能出现网络不稳定、支付渠道异常等问题,开发者需要设计相应的异常处理机制,确保用户支付的稳定性和一致性。

4. 后台管理系统:为了方便管理和监控支付系统的运行情况,开发者需要搭建相应的后台管理系统,包括支付数据统计、订单管理等功能。

三、第三方接口集成的挑战与解决方案在进行第三方接口集成过程中,开发者可能面临以下几个挑战:1. 版本兼容性:随着第三方接口的不断更新和升级,新版本的接口可能与之前的版本不兼容。

为了避免这个问题,开发者应及时关注接口的更新动态,并对接口进行及时升级。

第三方支付接口对接基本流程

第三方支付接口对接基本流程

如今,移动支付在人们生活中发挥着越来越重要的作用。

但是,很多人并不了解移动支付。

下面笔者为您具体说明,希望能够对您有所帮助。

一、概述按照人民银行颁布的《非金融机构支付服务管理办法》二条的定义,三方支付服务就是在收付款人之间作为中介机构提供货币资金转移服务,包括网络支付,预付费卡,银行卡收单。

通俗一点讲就是提供帮人收钱付钱的服务,三方公司通过提供各种技术接口来帮助收付款人完成收付款业务。

而这里要讨论的就是目前对接多的就是网络支付。

按照人民银行的定义,我们可以把三方支付提供的网络支付服务分为收款类和付款类两大类。

收款类又可以细分为收款服务和退款服务。

收款服务就是收款人发起的资金转移,但一般需付款人同意(快捷、代扣也是事先同意)。

退款服务就是在收款服务的基础上帮助原收款人将货币资金从原收款人处退回到原付款人处,一般不需要原付款人同意。

付款类服务就是付款人发起的资金转移,一般不需收款人同意(微信发红包就是需要收款人同意例外)。

下面我们就根据以上这些分类,逐个看一下相应技术接口的特点。

二、收款服务类接口收款服务类接口按照功能可以分为两大类:收款提交类接口和收款结果查询类接口。

收款提交类接口就是收款人通过技术接口请求三方支付机构帮助其完成收款。

从支付过程看收款提交类接口可以分为以下几类:收款结果查询类接口就是通过技术接口请求三方获得之前提交的收款请求的支付结果,一般用于异常情况修正。

三、退款服务类接口退款服务类接口按照功能可以分为两大类:退款提交类接口和退款结果查询类接口。

退款提交类接口就是原收款人通过技术接口请求三方支付机构帮助其完成退款。

从支付过程看退款提交类接口可以分为以下几类:退款结果查询类接口就是通过技术接口请求三方获得之前提交的退款请求的支付结果,一般用于异常情况修正。

四、付款服务类接口付款服务类接口按照功能可以分为两大类:付款提交类接口和付款结果查询类接口。

付款提交类接口就是付款人通过技术接口请求三方支付机构帮助其完成付款。

第三方支付服务接入协议(标准版)

第三方支付服务接入协议(标准版)

第三方支付服务接入协议1. 定义与解释1.1 协议双方•甲方:(甲方名称)•乙方:(乙方名称,即第三方支付服务提供商)1.2 术语定义•第三方支付服务:指乙方提供的,为甲方用户提供在线支付、转账、退款等金融支付服务的平台。

•接入:指甲方将自身的支付功能与乙方支付服务进行整合,实现甲方用户通过乙方平台进行支付的过程。

•API:应用程序编程接口,是乙方提供给甲方的用于接入支付服务的接口。

2. 协议内容2.1 接入范围甲方同意将自身的支付功能接入乙方支付服务,并遵守乙方的接入规范和要求。

2.2 API使用甲方在使用乙方API时,应遵守以下规定:•甲方应按照乙方提供的API文档进行接入,不得自行修改API。

•甲方应对通过API接入的支付信息保密,不得泄露给第三方。

•甲方应在乙方平台上注册并取得相应的接口权限。

2.3 支付服务乙方应向甲方提供稳定的支付服务,包括但不限于:•在线支付:乙方提供支付接口,甲方用户可通过乙方平台进行在线支付。

•转账:甲方用户可通过乙方平台向其他用户或账户发起转账。

•退款:甲方用户可通过乙方平台申请退款。

2.4 费用结算•甲方应按照与乙方约定的费率支付服务费用。

•甲方应在每月结算日前向乙方支付上一月的服务费用。

•乙方应提供费用结算的详细账单,甲方有权进行核对。

3. 权利与义务3.1 甲方权利与义务•甲方有权要求乙方提供稳定的支付服务,并保障支付安全。

•甲方应遵守国家的法律法规,不得利用乙方支付服务从事非法活动。

•甲方应对因自身原因导致的支付损失承担责任。

3.2 乙方权利与义务•乙方有权要求甲方遵守本协议,并按照约定使用乙方支付服务。

•乙方应保证支付服务的稳定性和安全性,确保甲方用户的支付权益。

•乙方应对因自身原因导致的支付损失承担责任。

4. 违约责任•如甲方违反本协议,乙方有权暂停或终止提供支付服务,并要求甲方支付违约金。

•如乙方违反本协议,甲方有权要求乙方赔偿因此造成的损失。

5. 争议解决•本协议的签订、履行、解释及争议解决均适用中华人民共和国法律。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

B2B网站对接支付宝接口网站转接支付宝解决方案大型网上购物系统除了能让会员选择货到付款结账方式外,还应该提供一些更方便快捷的网上支付方式。

如果网上商店没有足够的实力提供会员直接在网站中建立现金账户的功能,就可以将订单信息转接到支付宝,让会员从支付宝付款。

当然就算会员可以在网站上建立自己的现金账户,提供支付宝支付功能也不失为另一种方便快捷的支付方式,这可以给客户提供更多可选的支付方式。

首先,网上购物系统必须与支付宝公司签订合作协议,以确保从本购物网站上传到支付宝网站上的订单信息能被正确接收。

当会员于购物网站上买下一系列商品并选择支付宝付款方式后,购物系统即将会员购物的订单信息转发到支付宝,网站页面也会转到支付宝的付款页面。

此时,支付宝页面会发送一个验证信息到本网站以确认支付宝正确收到订单信息。

会员于支付宝网站付款完成后,网站页面会重新跳回本购物网站,同时支付宝会将已付款的订单信息发回本网站以便对本购物网站的数据库进行必要的修改操作。

另外本网站还需要向支付宝网站发送一个返回信息,告知支付宝本系统已正确收到付款完毕的订单信息并且已经完成对数据的处理操作。

向支付宝网站传送订单信息时主要参数的含义:gateway :支付接口service:识别是何接口实现何功能的表示seller_email:商家签约时的支付宝账号,即收款的支付宝账号key:安全校验码,与partner是一组partner:商户ID,合作伙伴IDsign_type:加密类型_input_charset:编码类型show_url:展示地址,即在支付宝页面时商品名称旁边的“详情”的链接地址out_trade_no:会员订单编号,订单编号必须在本系统中保持唯一subject:商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西,可把一次支付当作一次下订单body:商品描述,即备注total_fee:商品价格,也可称为订单的总金额源码分析(C#):首先必须建立一个通知页面(Notify.aspx)和一个返回页面(Return.aspx)以接受并验证从支付宝返回的信息并对数据库中相应的订单信息做修改处理操作。

Notify.aspx.cs代码using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Text;using System.Collections.Specialized;using System.IO;using Gateway;///<summary>///创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。

///该页面称作“通知页”,是异步被支付宝服务器所调用。

///当支付宝的订单状态改变时,支付宝服务器则会自动调用此页面,因此请做好自身网站订单信息与支付宝上的订单的同步工作///</summary>public partial class Alipay_Notify : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){string alipayNotifyURL ="https:///cooperate/gateway.do?service=notify_verify";//string alipayNotifyURL ="/trade/notify_query.do?";//此路径是在上面链接地址无法起作用时替换使用。

string partner = ""; //partner合作伙伴id(必须填写)string key = ""; //partner 的对应交易安全校验码(必须填写)string_input_charset = "utf-8";//编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。

否则极其容易造成MD5加密错误。

alipayNotifyURL = alipayNotifyURL + "&partner=" + partner + "&notify_id=" + Request.Form["notify_id"];//获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的string responseTxt = AliPay.Get_Http(alipayNotifyURL, 120000);//*******加密签名程序开始*******int i;NameValueCollection coll;//Load Form variables into NameValueCollection variable.coll = Request.Form;// Get names of all forms into a string array.String[] requestarr = coll.AllKeys;//进行排序;string[] Sortedstr = AliPay.BubbleSort(requestarr);//构造待md5摘要字符串;StringBuilder prestr = new StringBuilder();for (i = 0; i < Sortedstr.Length; i++){if (Request.Form[Sortedstr[i]] != "" && Sortedstr[i] != "sign" && Sortedstr[i] != "sign_type"){if (i == Sortedstr.Length - 1){prestr.Append(Sortedstr[i] + "=" +Request.Form[Sortedstr[i]]);}else{prestr.Append(Sortedstr[i] + "=" +Request.Form[Sortedstr[i]] + "&");}}}prestr.Append(key);string mysign = AliPay.GetMD5(prestr.ToString(), _input_charset);//*******加密签名程序结束*******string sign = Request.Form["sign"];if (mysign == sign && responseTxt == "true") //验证支付发过来的消息,签名是否正确,只要成功进如这个判断里,则表示该页面已被支付宝服务器成功调用//但判断内出现自身编写的程序相关错误导致通知给支付宝并不是发送success的消息或没有更新客户自身的数据库的情况,请自身程序编写好应对措施,否则查明原因时困难之极{if (Request.Form["trade_status"] == "WAIT_BUYER_PAY")// 判断支付状态_等待买家付款(文档中有枚举表可以参考){//更新自己数据库的订单语句,请自己填写一下string strOrderNO = Request.Form["out_trade_no"];//订单号string strPrice = Request.Form["total_fee"];//金额如果你申请了商家购物卷功能,在返回信息里面请不要做金额的判断,否则会校验通过不了。

}else if (Request.Form["trade_status"] == "TRADE_FINISHED" || Request.Form["trade_status"] == "TRADE_SUCCESS")// 判断支付状态_交易成功结束(文档中有枚举表可以参考){//更新自己数据库的订单语句,请自己填写一下string strOrderNO = Request.Form["out_trade_no"];//订单号string strPrice = Request.Form["total_fee"];//金额}else{//更新自己数据库的订单语句,请自己填写一下}Response.Write("success"); //返回给支付宝消息,成功,请不要改写这个success//success与fail及其他字符的区别在于,支付宝的服务器若遇到success时,则不再发送请求通知(即不再调用该页面,让该页面再次运行起来),//若不是success,则支付宝默认没有收到成功的信息,则会反复不停地调用该页面直到失效,有效调用时间是24小时以内。

//最好写TXT文件,以记录下是否异步返回记录。

////写文本,纪录支付宝返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)//string TOEXCELLR = "MD5结果:mysign=" + mysign + ",sign=" + sign + ",responseTxt=" + responseTxt;//StreamWriter fs = newStreamWriter(Server.MapPath("Notify_DATA/" +DateTime.Now.ToString().Replace(":", "")) + ".txt", false,System.Text.Encoding.Default);//fs.Write(TOEXCELLR);//fs.Close();}else{Response.Write("fail");//最好写TXT文件,以记录下是否异步返回记录。

相关文档
最新文档