支付流程简单逻辑分析
来源:互联网 发布:解放沉迷软件 编辑:程序博客网 时间:2024/06/05 17:23
1.支付宝和银联的支付流程
常用的支付方式有:
1、支付宝支付
https://openhome.alipay.com/doc/docIndex.htm?url=https://openhome.alipay.com/doc/viewKbDoc.htm?key=236714&type=cat
支付流程:
(1)先与支付宝签约,获取商户id(partner)和账号id(seller)
(2)下载相应的公私钥文件(加密签名使用),在客户端我们可能只需要私钥
(3)下载支付宝sdk
(4)生成订单信息,可以直接客户端或者自己服务端生存都可以,但是大多是服务端生存的。
(5)调用支付宝客户端,有支付宝客户端跟支付宝打交道
(6)支付完毕之后返回结果给客户端和服务端。
2、微信支付
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417694084&token=cd674b2fe840f8e60d09126cc5c7e2cd1317ffe6&lang=zh_CN
支付流程:
(1)注册微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些参数详情见图
(2)下载微信支付sdk
(3)客户端请求订单,后台与微信后台交互,返回给客户端支付参数;
(4)调用微信客户端,由微信客户端和微信服务器打交道;
(5)客户端和服务端都会收到支付结果;(前台消息不可靠,我们需要去后台验证,如果后台没有收到支付通知,后台去微信服务器验证然后将结果返回给客户端)
注意事项:
1)如果APP里面已经使用了ShareSDK,就有一些地方要注意。不要再重复导入微信的SDK,因为shareSDK里面的extend已经包括了微信的SDK。
2)微信本身是鼓励客户APP把签名算法放到服务器上面,这样信息就不容易被破解。但是如果客户APP本身没有服务器端,或者认为不需要放到服务器端,也可以直接把签名(加密)的部分直接放在APP端。Sample代码的注释有点乱,多次提到服务器云云,但是其实可以不这么做。
3、银联
支付流程:
(1)注册申请就不是前端的事了,直接介入sdk
(2)从自己的服务端获取流水号
(3)然后调用银联sdk,不用跳转,银联sdk直接是内嵌的
(4)支付完成之后会回调代理方法
4、内购
•请求有效的产品代号集合
•购买指定产品
•验证购买
•恢复购买
http://www.tairan.com/archives/2215/
常用的支付方式有:
1、支付宝支付
https://openhome.alipay.com/doc/docIndex.htm?url=https://openhome.alipay.com/doc/viewKbDoc.htm?key=236714&type=cat
支付流程:
(1)先与支付宝签约,获取商户id(partner)和账号id(seller)
(2)下载相应的公私钥文件(加密签名使用),在客户端我们可能只需要私钥
(3)下载支付宝sdk
(4)生成订单信息,可以直接客户端或者自己服务端生存都可以,但是大多是服务端生存的。
(5)调用支付宝客户端,有支付宝客户端跟支付宝打交道
(6)支付完毕之后返回结果给客户端和服务端。
2、微信支付
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417694084&token=cd674b2fe840f8e60d09126cc5c7e2cd1317ffe6&lang=zh_CN
支付流程:
(1)注册微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些参数详情见图
(2)下载微信支付sdk
(3)客户端请求订单,后台与微信后台交互,返回给客户端支付参数;
(4)调用微信客户端,由微信客户端和微信服务器打交道;
(5)客户端和服务端都会收到支付结果;(前台消息不可靠,我们需要去后台验证,如果后台没有收到支付通知,后台去微信服务器验证然后将结果返回给客户端)
注意事项:
1)如果APP里面已经使用了ShareSDK,就有一些地方要注意。不要再重复导入微信的SDK,因为shareSDK里面的extend已经包括了微信的SDK。
2)微信本身是鼓励客户APP把签名算法放到服务器上面,这样信息就不容易被破解。但是如果客户APP本身没有服务器端,或者认为不需要放到服务器端,也可以直接把签名(加密)的部分直接放在APP端。Sample代码的注释有点乱,多次提到服务器云云,但是其实可以不这么做。
3、银联
支付流程:
(1)注册申请就不是前端的事了,直接介入sdk
(2)从自己的服务端获取流水号
(3)然后调用银联sdk,不用跳转,银联sdk直接是内嵌的
(4)支付完成之后会回调代理方法
支付功能-需要返回哪些参数
公共返回参数
result_code返回码0为正常
result_msg返回信息,OK为正常
err_detail具体错误信息
id成功发起支付后返回支付表记录
不同的支付方式的返回参数有些不同,可以到官方文档去看。
支付宝返回参数说明
1、支付宝的返回有两种:return的客户端返回,notify的服务器通知返回。
支付完成后立刻返回到外部网站的客户端上,是可见的,返回机制:以GET的方式返回
返回信息包括提交给支付宝的订单信息,可根据这个返回信息做相应的操作显示给客户看。
notify_url:服务器的返回
服务器的通知返回是由支付宝的服务器发起,以POST的方式返回到合作伙伴的网站上。返回信息包括提交给支付宝的订单信息,在返回的文件中,需要输出success做为支付宝通知返回信息成功,若没有这个success的输出,那么支付宝的服务器会24小时内返回同样的返回消息,返回的时间频率会逐渐减弱,(1分钟、3分钟、5分钟、10分钟、15。。。。。。。。。。)
notify_url页面中只能做对数据库的业务操作
建议:return_url和notify_url可以都设置,前者做数据显示,后者做更新数据库
2、 注意的地方,每种返回都是有一个sign和mysign的验证,作用,验证参数是否有效和是否是支付宝发出的消息。还有一个交易状态的判断:trade_status是判断交易状态是否成功,例如:
返回状态:
trade_status = "WAIT_BUYER_PAY"等待买家付款
trade_status = "WAIT_SELLER_SEND_GOODS"买家付款,等待买家发货
trade_status = "WAIT_BUYER_CONFIRM_GOODS"卖家付款,等待买家确认
rade_status = "TRADE_FINISHED"交易完成
基本上会有以上几种重要的交易状体需要判断,还有一些详细:请以支付宝接口文档为主,当然不是每种接口都有这些交易状态,虚拟的即时到帐接口是不存在买卖双方确认的环节的。
service = "create_direct_pay_by_user"即时到帐接口的服务名称
service = "trade_create_by_buyer"标准实务双接口服务名称
HAS_NO_PRIVILEGE出现这个样的错误,请注意您说开通的接口权限是否是以上两种,或者在您集成的接口中是否有用您与支付宝签约后的ID和key
4.支付的安全处理;
(1)请求基于https
(2)可多次进行数据加密
关于支付方面安全的处理不用我们去管,具体的安全问题是由支付宝、微信等支付三方的自己内部去做的。
- 支付流程简单逻辑分析
- 支付宝支付流程 及简单实现
- 【在线支付】在线支付流程分析
- iOS支付宝(Alipay)接入详细流程,比微信支付更简单,项目实战中的问题分析
- 百度新闻后台逻辑流程分析
- 百度新闻后台逻辑流程分析
- 咖啡兔流程执行逻辑分析
- 第三方支付交易简单流程
- 微信支付 简单的流程
- 支付宝java后台接入简单流程
- tslib简单流程分析
- Apple Pay 应用内支付流程分析
- 支付风控模型流程分析
- 智能卡脱机支付交易流程分析
- 支付漏洞总结 / 在线支付流程安全分析
- 支付漏洞总结 / 在线支付流程安全分析
- 简单分析Cocos2d-x 引擎运行逻辑
- CockroachDB 逻辑执行计划简单分析
- 设计模式学习笔记系列(一)——面向对象设计原则
- littlecode
- osgearth2.8编译实现(VS2012 win10)
- 数据挖掘常用算法整理
- 关键字static/const的作用
- 支付流程简单逻辑分析
- VS中C++ 项目重命名
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Scrum敏捷开发
- js中innerHTML与innerText的用法与区别
- Java的位运算(bitwise operators)
- 关于setTimeout()得到的教训
- ORA-00020:maximum number of processes (150) exceeded 错误解决方法
- 在Django框架中进行字符串翻译