⽀付—前端+服务器流程梳理(适⽤于新⼿观看)
前⾔
前⼀阵⼦有朋友初次集成⽀付,遇到很多坑。现在⼩伙伴终于集成完毕,并写下了本篇博客,我⼀直以来也想整理⼀下,⽆奈本⼈懒的整理,这次正好借⽤⼀下⼩伙伴的笔记,哈哈。
⽹上关于⽀付的⽂章很多,但是感觉写的很多⽽且很乱,⽽且都是讲客户端和服务端全都写出来,搞得看的⼈根本搞不懂在客户端应该写写什么,在服务端应该写些什么;让⼈头很⼤!在这⾥主要区分客户端和服务端应该进⾏的操作流程!其实现流程也是按照⽀付的开发⽂档来实现的;有的⼈可能会说⽀付的⽂档很乱搞不清该写些什么,说实话对于第⼀次集成的⼈来说确实⽐较乱,⼀着急就更加迷茫了!所以在此特梳理⼀下⽀付的实现流程和集成的时候所遇到的坑!
流程
爆笑电影推荐步骤1:⽤户在商户APP中选择商品,提交订单,选择⽀付。
步骤2:商户后台收到⽤户⽀付单,调⽤⽀付统⼀下单接⼝。参见。
步骤3:统⼀下单接⼝返回正常的prepay_id,再按签名规范重新⽣成签名后,将数据传输给APP。参与签名的字段名为
appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起⽀付。api参见本章节
步骤5:商户后台接收⽀付通知。api参见
步骤6:商户后台查询⽀付结果。api参见
1.客户端
根据的开发⽂档显⽰所有关于订单的签名加密的操作最好放到服务端去实现;下⾯是⽀付客户端所需要实现的⽅法:
1、项⽬设置APPID
商户在开放平台申请开发APP应⽤后,开放平台会⽣成APP的唯⼀标识APPID。在Xcode中打开项⽬,设置项⽬属性中的URL Schemes为您的APPID;
2、注册APPID
商户APP⼯程中引⼊lib库和头⽂件,调⽤API前,需要先向注册您的APPID,代码如下:
[WXApi registerApp:@”wxd930ea5d5a258f4f”];
3、调起⽀付
商户服务器⽣成⽀付订单,先调⽤【统⼀下单API】⽣成预付单,获取到prepay_id后将参数再次签名传输给APP发起⽀付。以下是调起⽀付的关键代码:
//下⾯所有的参数都是服务端返回的(注意事项:就是时间戳在iOS中是10位的,超过10位会越界;)
PayReq *request = [[PayReq alloc] init];
request.partnerId = @"10000100";
request.prepayId = @"1101000000140415649af9fc314aa427";
request.package = @"Sign=WXPay";
request.timeStamp = @"1397527777";
request.sign = @"582282D72DD2B03AD892830965F428CB16E7A256";
[WXApi sendReq:request];
4、⽀付结果回调
照SDK Sample,在类实现onResp函数,⽀付完成后,APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果⽀付成功则去后台查询⽀付结果再展⽰⽤户实际⽀付结果。注意 ⼀定不能以客户端返回作为⽤户⽀付的结果,应以服务器端的接收的⽀付通知或查询API返回的结果为准。
//SDK⾃带的⽅法,处理从客户端完成操作后返回程序之后的回调⽅法,显⽰⽀付结果的
- (void)onResp:(BaseResp *)resp{
虞姬出装//启动⽀付的response
NSString *payResoult = [NSString stringWithFormat:@"errcode:%d",Code];
if([resp isKindOfClass:[PayResp class]]){
玉米面发糕的做法/
/⽀付返回结果,实际⽀付结果需要去服务器端查询
switch (Code) {div
case0:
payResoult = @"⽀付结果:成功!";
NSLog(@"⽀付成功!");
break;
case -1:
payResoult = @"⽀付结果:失败!";
NSLog(@"⽀付失败!");
break;
case -2:
payResoult = @"⽤户已经退出⽀付!";
NSLog(@"⽤户退出!");
break;
default:
payResoult = [NSString stringWithFormat:@"⽀付结果:失败!retcode = %d, retstr = %@", Str];
break;
}
页眉页脚怎么设置}
}
2.服务端
对于集成⽀付来说任务基本上都是在服务端来完成;主要是为了安全起见,防⽌被别⼈篡改信息;
第⼀步:统⼀下单
客户端将⽣成订单所需要的信息传给服务端,服务端接收到的参数格式化为XML格式的数据,完成之后将返回的数据进⾏解析,取出
客户端需要的数据,⽤户唤起进⾏⽀付(所需参数包括:appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay);
总结:
1.请求参数需要按照参数的key进⾏字母的ASCII码进⾏排序;
2.对排序后的数据进⾏MD5签名,服务端会进⾏校验,防⽌数据在⽹络传输过程中被篡改。
3.拿到响应的数据,⾸先要做的事,也是对获取的数据进⾏签名校验,理由同上。
4.需要注意的⼀点,返回给app客户端的数据的key⼀定是⼩写,这点的api是没有说明⽩的,之前和客户端联调时耽误了很多时间,这也是⽀付被很多开第⼆步:调起⽀付
⼀般是通过客户端来调起进⾏⽀付的;
通过上⼀步服务器返回的⽀付参数通过调⽤SDK调起⽀付;向⽀付系统发起⽀付请求,⽀付系统验证⽀付参数,APP⽀付权限
等,返回需要⽀付的授权,⽤户确认⽀付,输⼊⽀付密码;提交⽀付授权,⽀付系统验证授权完成⽀付;
第三步:查询订单
客户端在接收到⽀付系统的⽀付结果回调之后并不代表最终的⽀付结果成功,还需要向后台查询实际的⽀付结果,服务端需要调⽤
的查询API查询⽀付结果,服务端返回⽀付结果记录!客户端通过后台查询的⽀付结果才是最终的⽀付结果;
一尺等于多少寸3.总结
整个⽀付的整个流程就是这样,中间写的多有不⾜,还望⼤家批评指点!如有什么问题欢迎⼤家下⽅留⾔!O(∩_∩)O谢谢….
服务端开发请参考:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论