请教APP集成支付宝app支付 服务端,服务端该怎么设计

App 集成支付宝支付接口(一)沙箱配置_Android_第七城市
App 集成支付宝支付接口(一)沙箱配置
以前没有弄过支付,公司项目中要集成支付接口,首先集成支付宝支付接口,所以才来捣鼓它。官方app太多。网上找的资料也不全面,特别是服务端,资料少、描述不清晰、重点没有说明。下面开始我们的支付宝接口集成之旅。 沙箱测试: App支付沙箱接入注意点 1、app支付支持沙箱接入;在沙箱调通接口后,必须在线上进行测试与验收,所有返回码及业务逻辑以线上为准; 2、app支付只支持余额支付,不支持银行卡、余额宝等其他支付方式; 3、app支付只支持Android版接入,在使用sdk时,在支付接口前调用如下方法 EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX); 用于切换沙箱环境与生产环境;如果不使用此方法,默认使用生产环境;在钱包不存在的情况下,会唤起h5支付; 注:在生产环境,必须将此代码注释! 4、app支付中请使用沙箱版钱包测试:点击管理中心-沙箱环境-沙箱工具 5、如果提示签约过期,可是试着找技术客户,让他们开通appid测试权限。 沙箱配置官方地址 https://doc./doc2/detail.htm?treeId=200&articleId=105311&docType=1 账号申请 要集成支付宝接口,必须是注册的企业才能申请。所以个人就别想咯 登录开发者管理中心 开发者中心:/platform/home.htm
点击“立即使用”进入管理中心
申请开发者成功后,系统会自动为你生成沙箱应用和沙箱商家、买家账号密码
沙箱买家账号余额可以自己随意充值<元
应用网关和授权回调地址问支付宝技术说不设置也可以。暂时没弄明白用处,所以暂时我也不介绍了。 RSA(SHA1)密钥:因为我这里已经设置过了,所以会显示查看应用公钥和支付宝公钥(上传应用公钥支付宝自动返回),需要自己生成密钥,添加到这里。(将在二中介绍密钥生成)也可以参考官方。 https://doc./doc2/detail.htm?treeId=200&articleId=105310&docType=1#s0 AES密钥:系统自动生成,加密时使用,也可以不用他。
最新教程周点击榜
微信扫一扫提供主流cms教程
提供数据库教程和设计
提供各种常见网页js代码
提供常用的JS特效代码及在线演示
提供jQuery插件教程及插件下载
提供服务器常见问题及教程
提供站长技术、站长资讯等内容
提供常用开发手册和开发工具
您现在的位置:& >
Hello MUI增加BeeCloud支付集成示例,无服务端也可完成支付全流程
导读:DCloud和BeeCloud合作的支付业务,与普通的三方支付不同。它仅需要工程师写前端App的js代码,调用Plus的原生支付接口进行支付宝和微信的原...
DCloud和BeeCloud合作的支付业务,与普通的三方支付不同。
它仅需要工程师写前端App的js代码,调用Plus的原生支付接口进行支付宝和微信的原生支付,不需要服务器编写代码,即可收款到开发商自己的微信或支付宝的账户里。
需要注意钱并不流经DCloud或beecloud的服务器,开发商向微信和支付宝申请账户,最终用户支付的钱直接到达开发商在微信或支付宝里申请的账户。
目前还不支持银联,下个版本会支持银联支付,同时会扩展至无plus环境的普通浏览器上自动兼容wap支付。
体验DEMO的方式:HBuilder 6.9版本后新建的Hello mui项目含有cloud pay模板。
在注册,并完成企业认证。
在创建你的第一个APP。
配置支付参数
配置您所需的支付渠道的支付参数,具体请参考,如图:
manifest.json配置
模块权限配置
勾选payment模块
需要在plus.payment-支付中配置scheme
支付宝支付
自定义填写,推荐使用小写字符串,不能填写alipay,AliPay等关键字
固定填写,微信开放平台创建应用的APPID
& 这些配置都是云打包之后生效,所以测试微信支付,必须云打包之后,在手机上运行,才能正常调起微信客户端支付。否则在数据正常的情况下,调起微信客户端后,会出现异常(只显示一个确定按钮)
真机运行使用的是DCloud公司的支付配置信息,此时付款会付给DCloud。
在页面中引入beecloud.js
( 在Hello mui里含有本文件)
src=&/static/css/default/img/default.jpg& data-original=&beecloud.js&
构建支付参数发起支付
src=&/static/css/default/img/default.jpg& data-original=&beecloud.js&
type=&text/javascript&
function beecloudPay(bcChannel) {
* 构建支付参数
* app_id: BeeCloud控制台上创建的APP的appid,必填
* title: 订单标题,32个字节,最长支持16个汉字;必填
* total_fee: 支付金额,以分为单位,大于0的整数,必填
* bill_no: 订单号,8~32位数字和/或字母组合,确保在商户系统中唯一,必填
* optional: 扩展参数,可以传入任意数量的key/value对来补充对业务逻辑的需求;此参数会在webhook回调中返回; 选填
* bill_timeout: 订单失效时间,必须为非零正整数,单位为秒,必须大于360。选填
var payData = {
app_id: &c37d661d-7e61-49ea-96a5-68c34e83db3b&,
channel: bcChannel,
title: &DCloud&,
total_fee: 1,
bill_no: beecloud.genBillNo(),
optional: {&#39;uerId&#39;:&#39;beecloud&#39;,&#39;phone&#39;:&#39;&#39;},
bill_timeout: 360
payData: 支付参数
cbsuccess: 支付成功回调
cberror: 支付失败回调
beecloud.payReq(payData, function(result) {
mui.alert(&----- 支付成功 -----& + str);
}, function(e) {
mui.alert(&----- 支付失败 -----\n& +&错误码:&+ e.code + &#39;\n&#39; + e.message);
转载请注明(B5教程网)原文链接:
网友评论:支付宝APP支付服务端详解
前面接了微信支付,相比微信支付,支付宝APP支付提供了支付分装类,下面将实现支付宝APP支付、订单查询、支付结果异步通知、APP支付申请参数说明,以及服务端返回APP端发起支付的签名、商户私钥、支付宝公钥的配置使用等。
支付注意事项
1、APP支付不能在沙箱测试、只能申请上线测试&2、需要创建RSA密钥,设置后上传rsa_public_key.pem【开发者公钥,上传时需要去掉公钥的头和尾】上传成功后换取支付宝公钥,为项目的alipay_public_key.pem&3、rsa_private_key_pkcs8.pem【开发者私钥】,去掉头和尾为项目的alipay_private_key_pkcs8.pem&4、需要导入所需支付包:alipay-sdk-java.jar 和 commons-logging.jar,具体参考:
支付文档参考:,
APP支付:服务器端按照文档【统一收单交易支付接口】创建支付OrderStr返回APP端&&-APP端拿到OrderStr发起支付&&支付宝服务器端回调服务端异步通知接口&&-服务器端按照【App支付结果异步通知】校验签名等做业务逻辑处理
APP支付订单查询:服务器端调用【统一收单线下交易查询】查询支付订单
APP支付申请退款:每笔支付可以申请多次退款,但退款总金额不能超过支付金额,调用【统一收单交易退款接口】发起退款申请
APP支付退款查询:服务端调用【 统一收单交易退款查询】查询退款订单信息
以上为转载。
在具体开发的时候会出现一些问题。总结一下:
问题1:生成密钥的问题
密钥有3个。
密钥生成见支付宝帮助文档,地址是 &
我在使用WIN10系统使用方式1生成的时候,点击解压打开文件夹,直接运行&支付宝RAS密钥生成器SHAwithRSA.bat&。他是啥都没有生成,然后我又自作聪明跑到 &secret_key_tools_RSA_win\RSA\openssl 目录下运行生成公钥.bat , 生成公钥私钥转换PCKS8.bat , 私钥转换PCKS8.bat 批处理文件。(secret_key_tools_RSA_win.zip解压后的文件夹名)
结果是,还是有问题。
后来同事用方式1,但是改成苹果笔记本生成就好了。
好是怎么验证出来的呢?
打开&& 地址,
在左边的导航栏里面选择,应用环境&&》接口加签方式 &打开下面的窗口。
在第三步下载签名检验的工具,将生成的密钥放入左侧,然后生成签名后,再放入第三步的窗口中进行验证看是否正确。校验通过,则说明公钥和私钥生成成功。
&具体代码如下。
/// &summary&
/// 支付下单
/// &/summary&
[Route("SignaturesUrl")]
public AliPayReturn SignaturesUrl()
//post接收客户端发来的订单信息.
Dictionary&string, string& sPara = GetRequestPost();
////获取订单信息partner.
//string partner = HttpContext.Current.Request.Form["partner"];
////获取订单信息service.
//string service = HttpContext.Current.Request.Form["service"];
AliPayReturn request_code = new AliPayReturn();
request_code.OMsg = new OMsg();
//判断partner和service信息匹配成功.
//if (partner != null && service != null)
if (partner.Replace("\"", "") == Config.partner && service.Replace("\"", "") == Config.service)
//将获取的订单信息,按照&参数=参数值&的模式用&&&字符拼接成字符串.
string data = Core.CreateLinkString(sPara);
//调试用,打印日志信息,默认在项目路径下的log文件夹.
//Core.LogResult(data);
//string jsonSign= HttpUtility.UrlEncode(RSA.sign("a=123", Config.private_key, "GBK"));
//使用商户的私钥进行RSA签名,并且把sign做一次urleccode.
string sign = HttpUtility.UrlEncode(RSA.sign(data, Config.private_key, Config.input_charset));
//拼接请求字符串(注意:不要忘记参数值的引号).
data = HttpUtility.UrlEncode(data) + "&sign=\"" + sign + "\"&sign_type=\"" + Config.sign_type + "\"";
Core.LogResult("服务端返回的值:" + data);
//返回给客户端请求.
//HttpContext.Current.Response.Write(data);
Dictionary&string, string& dicResult = new Dictionary&string, string&();
dicResult.Add("return_url", data);
request_code.OMsg.Flag = "S";
request_code.OMsg.Msg = "调用成功";
request_code.return_info = dicR
return request_
//HttpContext.Current.Response.Write("订单信息不匹配!");
request_code.OMsg.Flag = "F";
request_code.OMsg.Msg = "订单信息不匹配";
return request_
//HttpContext.Current.Response.Write("无客户端请求!");
request_code.OMsg.Flag = "F";
request_code.OMsg.Msg = "无客户端请求";
return request_
/// &summary&
/// 回调接口
/// &/summary&
/// &param name="id"&&/param&
[Route("NotifyUrl/{id}")]
public void NotifyUrl(int id)
Dictionary&string, string& sPara = GetRequestPost();
string notify_id = HttpContext.Current.Request.Form["notify_id"];//获取notify_id
string sign = HttpContext.Current.Request.Form["sign"];//获取sign
if (notify_id != null && notify_id != "")//判断是否有带返回参数
Notify aliNotify = new Notify();
if (aliNotify.GetResponseTxt(notify_id) == "true")
if (aliNotify.GetSignVeryfy(sPara, sign))
//&&请根据您的业务逻辑来编写程序(以下代码仅作参考)&&
//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
//商户订单号
string out_trade_no = HttpContext.Current.Request.Form["out_trade_no"];
//支付宝交易号
string trade_no = HttpContext.Current.Request.Form["trade_no"];
//交易状态
string trade_status = HttpContext.Current.Request.Form["trade_status"];
if (HttpContext.Current.Request.Form["trade_status"] == "TRADE_FINISHED")
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的out_trade_no、total_fee、seller_id与通知时获取的out_trade_no、total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
else if (HttpContext.Current.Request.Form["trade_status"] == "TRADE_SUCCESS")
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的out_trade_no、total_fee、seller_id与通知时获取的out_trade_no、total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序
//付款完成后,支付宝系统发送该交易状态通知
//&&请根据您的业务逻辑来编写程序(以上代码仅作参考)&&
HttpContext.Current.Response.Write("success");
//请不要修改或删除
HttpContext.Current.Response.Write("sign fail!");
HttpContext.Current.Response.Write("response fail!");
HttpContext.Current.Response.Write("非通知参数!");
/// &summary&
/// 获取请求数据
/// &/summary&
/// &returns&&/returns&
private Dictionary&string, string& GetRequestPost()
int i = 0;
SortedDictionary&string, string& sArraytemp = new SortedDictionary&string, string&();
NameValueC
//Load Form variables into NameValueCollection variable.
coll = HttpContext.Current.Request.F
#region 读取客户端传递的参数
// Get names of all forms into a string array.
String[] requestItem = coll.AllK
string paramLog = "客户端提交的参数值:";
for (i = 0; i & requestItem.L i++)
sArraytemp.Add(requestItem[i], HttpContext.Current.Request.Form[requestItem[i]]);
paramLog += requestItem[i] + "," + HttpContext.Current.Request.Form[requestItem[i]] + "&br&";
Core.LogResult(paramLog);
#endregion
Dictionary&string, string& sArray = new Dictionary&string, string&();
foreach (KeyValuePair&string, string& temp in sArraytemp)
sArray.Add(temp.Key, temp.Value);
阅读(...) 评论()请教APP集成支付宝,服务端该怎么设计呢?
请教APP集成支付宝,服务端该怎么设计呢?
希望大神给我描绘一下整个支付的过程。
1 客户端向业务服务端提交订单,业务服务方生成一个订单号
2 客户端根据订单号生成支付宝所需要的参数,向支付宝的支付接口提交
3 支付宝的支付接口返回同步数据。
4 支付宝服务端请求回调函数,这个回调函数是在业务服务方的,这个请求是异步的。
5 客户端根据用户订单号来去业务服务方确认是否已经支付成功。
这是我找资料看到的过程 ,我想知道在这些环节服务端都干了什么,是怎么去做到的。
毕业论文催的紧,论文项目涉及的支付环节从来没做过,APP客户端服务端都得自己来,希望各位大神指点一下!谢谢了!
请详见淘宝秒杀设计: /question/
服务端的作用主要是异步接收支付宝发送的反馈,并给支付宝返回success,如果不是success,支付宝会根据一定的时间策略不停重发。
三两句话就说得清楚了。
1.客户端选购商品,提交商品信息到服务端(Client-&[{商品1,1件,¥100},{商品1,1件,¥100}]-&Server)
2.服务端订单入库生成订单号反馈给客户端(Server-&[2333333,¥200]-&Client)
3.调用支付宝SDK携带一些参数(,¥200, http://domain/payment_notify )(SDK干了什么只有支付宝知道)
4.用户支付完成,支付宝服务器通知应用服务器(HTTP访问http://domain/payment_notify),服务器做验证判断支付是否成功。
5.支付完成后,回到APP,APP收到通知,访问服务器接口验证是否成功。
服务端要做的事:1.生成订单号,处理业务逻辑;2.根据支付宝服务端发过来的异步请求处理你自己的逻辑,然后给支付宝返回success,不然支付宝会重复发送多次(好像是6次)
Copyright & 2016 phpStudy

我要回帖

更多关于 支付宝php服务端集成 的文章

 

随机推荐