美文网首页
iOS 接入瑞典Swish支付

iOS 接入瑞典Swish支付

作者: 伤心的EasyMan | 来源:发表于2019-07-15 19:38 被阅读0次

前言

公司的APP由于要在瑞典投入使用,所以需要接入当地的Swish支付,但这种支付方式,在他们的官网只有简单的几个文档,Github上也没有提供Demo, 网上的资料几乎没有,所以这里写一篇对接入这个支付的流程总结,希望对需要使用Swish支付的同学有帮助。
这里是Swish的开发者文档官方地址:https://developer.getswish.se/merchants/

为什么要接入Swish支付?

Swish是超过半数瑞典人都在使用的移动支付APP,瑞典总人口约970万人,Swish的使用人数已经超过500万,支持瑞典的六家银行。所以Swish在瑞典的地位,就和微信支付,支付宝支付在中国国内的地位一样。

1. 配置Swish的后台证书环境

这个步骤是由后台的同学来做的,需要进入这个网页配置Swish的证书,https://comcert.getswish.net/cert-mgmt-web/authentication
在配置过程中需要的CSR文件是在服务器上生成的,然后复制文件的内容到输入框里,如下图所示

然后会生成一个PEM证书文件,如下图所示,把里面的内容拷贝下来,自己新建一个PEM证书文件格式的内容保存下来


2. APP获取token

APP传递付款金额,货币(Swish暂时只支持SEK,所以除了瑞典克朗其他货币都是不支持的),付款描述这些值给后台接口,然后后台会返回token(用来跳转到Swish APP进行支付) paymentID(后面会用来做支付状态验证)。
下面是我的请求这个接口的代码示例,仅供参考

//发送付款请求(swish)
-(RACSignal *)getSwishPaymentTokenSignal:(NSString *) amount currency:(NSString *)currency desc:(NSString *)desc{
    @weakify(self)
    return [[[self.services.client getSwishPaymentToken:amount
                                               currency:currency
                                                   desc:desc] doNext:^(id  _Nullable response) {
        @strongify(self)
        self.clientToken = response[@"token"];
        self.paymentId = response[@"id"];
    }] takeUntil:self.rac_willDeallocSignal];
}

3. 后台生成token返回给APP

后台调用这个请求支付接口(这里是正式环境的接口,由于Swish测试环境不能进行使用Swish APP支付的测试,所以我这里直接使用的正式环境)
https://cpc.getswish.net/swish-cpcapi/api/v1/paymentrequests
这里是后台请求的示例代码,这里的证书文件是p12格式的,是由上面步骤的PEM证书直接生成的:

curl -v --data '{ "payeePaymentReference": "0123456789", "callbackUrl":
"https://example.com/api/swishcb/paymentrequests", "payeeAlias":
"1231181189", "amount": "100", "currency": "SEK", "message": "Kingston
USB Flash Drive 8 GB" }' -H "Content-Type: application/json" POST
https://mss.cpc.getswish.net/swish-cpcapi/api/v1/paymentrequests --cert
"Swish Merchant Test Certificate 1231181189.p12:swish" --cert-type p12 --
cacert "Swish TLS Root CA.pem"

这个接口会返回Token和paymentID,是返回在请求头里的,如下所示

< HTTP/1.1 201
< Location: https://mss.cpc.getswish.net/swishcpcapi/api/v1/paymentrequests/11A86BE70EA346E4B1C39C874173F088
< Server: nginx/1.12.1
< Connection: keep-alive
< PaymentRequestToken: ed16db6f415145ec93642e294c904378
< Content-Length: 0
< Date: Fri, 04 Jan 2019 08:34:59 GMT
<

4. APP调用Swish APP进行支付

在调起Swish APP进行支付前,首先要配置当前应用的Scheme
如下图所示,在工程info下的URL Types配置URL Schemes,我这里写的是自己的应用名拼接swish.com,这里可以自定义,配置好即可


使用token跳转到Swish APP进行支付,代码如下所示:
下面的xxx1是上图配置的URL Schemes,xxx2是上图中的Identifier,一定要配置对,不然会跳转不回自己的APP。

- (void)swishPay:(NSString *)token{
    if (@available(iOS 10.0, *)) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"swish://paymentrequest?token=%@&callbackurl=xxx1://xxx2.swish.com",token]] options:@{} completionHandler:^(BOOL success) {
            
        }];
    } else {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"swish://paymentrequest?token=%@&callbackurl=xxx1://xxx2.swish.com",token]]];
    }
}

5. 验证Swish支付是否成功

在Swish APP里支付完成后,会返回到自己的应用里,在AppDelegate.m 写上以下代码监听Swish跳转回当前应用。由于Swish支付未提供支付回调接口,所以手动发通知给支付页面,请求后台去判断是否支付成功。

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
    if([url.absoluteString containsString:@"swish"]){
        //swish支付跳转回来
        [MHNotificationCenter postNotificationName:SDSwishPayResultNotification object:nil];
    }
    return YES;
}

监听到需要发送的通知后,传递paymentId(在上面后台已经返回过来了)给后台,调用后台的Swish验证接口,验证是否支付成功。

6. 后台验证Swish支付

后台查询付款的接口是: /api/v1/paymentrequests/{id}
请求示例代码如下所示:

curl -v "Content-Type: application/json" GET
https://mss.cpc.getswish.net/swishcpcapi/api/v1/paymentrequests/5D59DA1B1632424E874DDB219AD54597 --cert
"Swish Merchant Test Certificate 1231181189.p12:swish" --cert-type p12 --
cacert "Swish TLS Root CA.pem"

返回示例代码如下所示:

< HTTP/1.1 200
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Fri, 04 Jan 2019 09:00:29 GMT
<
* Connection #1 to host mss.cpc.getswish.net left intact
{"id":"5D59DA1B1632424E874DDB219AD54597","payeePaymentReference":"0123456
789","paymentReference":"1E2FC19E5E5E4E18916609B7F8911C12","callbackUrl":
"https://example.com/api/swishcb/paymentrequests","payerAlias":"467123476
8","payeeAlias":"1231181189","amount":100.00,"currency":"SEK","message":"
Kingston USB Flash Drive 8 GB","status":"PAID","dateCreated":"2019-01-
02T14:29:51.092Z","datePaid":"2019-01-
02T14:29:55.093Z","errorCode":null,"errorMessage":""}

如果能查到该付款的status 为 PAID,即表示Swish支付是成功的,在接口里返回成功给APP即可。

总结

以上就是接入Swish支付的整个流程分析,如果还需要退款功能,可以参照API文档,和支付的接口内容是差不多的,这是Swsih支付的官方文档地址:
https://developer.getswish.se/content/uploads/2019/03/Merchant-Integration-Guide.pdf

期待

  • 文章若有些许帮助,请给个喜欢或评论;若没啥帮助,请给点建议~

  • 如果有疑问,请在文章底部评论指出,我会火速解决和修正问题。

相关文章

  • iOS 接入瑞典Swish支付

    前言 公司的APP由于要在瑞典投入使用,所以需要接入当地的Swish支付,但这种支付方式,在他们的官网只有简单的几...

  • 支付宝支付接入(Android/IOS(swift)/Java后

    本文章仅作为个人笔记 接入方式可以参考支付宝登录接入 IOS端(swift):主要接入和代码可参考支付宝登录接入 ...

  • 一些学习资料

    iOS各种支付功能 :链接 其中:1支付宝app支付接入指南:链接2微信app支付接入指南:链接 Unity3d游...

  • SDK接入(3)之iOS内支付(In-App Purchase)

    SDK接入(3)之iOS内支付(In-App Purchase)接入 继整理了Android平台的SDK接入过程。...

  • 支付

    支付宝集成:http://caoyudong.com/2016/01/03/iOS接入支付宝/ 微信支付:http...

  • 支付宝支付

    原文地址:https://www.jianshu.com/p/b3063678c462 iOS接入支付宝支付(小白...

  • iOS 微信支付,提示支付签名验证失败

    记录一下之前接入微信支付遇到的天坑。 1. 按照文档接入 微信开发平台iOS接入文档[https://pay.w...

  • 2019-08-30

    商户对接文档(支付SDK)iOS端接入文档 SDK接入 1,将TLIMPaySDK文件夹拖入工程 如果引入的库和本...

  • iOS接入支付宝支付,hex编码,ALI38173问题

    iOS端今天接入了支付宝支付,接入过程很简单,代码量也很少,说一下与后台交互踩的坑: 后台拼接完订单信息直接将返回...

  • IOS接入Stripe支付

    简单写一下,能最快的实现支付。 步骤为:加卡->选择支付方式->发起支付(或使用ApplePay) 1.加卡 加卡...

网友评论

      本文标题:iOS 接入瑞典Swish支付

      本文链接:https://www.haomeiwen.com/subject/qbuokctx.html