简介:
公司项目里需要用到移动支付模块,就将支付宝、微信集成进来了,也是先看官方文档,照着文档集成,那么调试环境分为测试和生产环境
基本流程:
支付宝流程:将商品信息进行加签, 后台拿私钥进行签名,将签名后的商品信息字符串返回给商家客户端,调用支付SDK
微信流程: 在服务端生成预订单,返回预支付**prepay_id, 将参数再次签名,组装成Req对象,发送给app调用支付.
集成时候遇到的问题:
- 后端配置好了沙箱环境,支付宝不支持沙箱环境,安卓支持沙箱环境,可以用沙箱账号登录后调用相关支付接口.
- 因为是混合开发,H5页面调用原生方法唤起支付宝,唤起失败(需要拦截URL)
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
NSLog(@"在发送请求前,决定是否跳转");
//mark:H5支付WKWebView中无法拉起支付宝/微信客户端支付,需要做如下配置
//参考网址:https://blog.csdn.net/auccy/article/details/125623087
//网页检查元素:decodeURIComponent ("abcdefghijklmnopqlstuvwxyz")
NSURL *url = navigationAction.request.URL;
NSString *urlStr = [[url absoluteString] stringByRemovingPercentEncoding];
if ([urlStr containsString:@"weixin://wap/pay"] || [urlStr containsString:@"alipay://alipayclient"]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
decisionHandler(WKNavigationActionPolicyCancel);
}else{
decisionHandler(WKNavigationActionPolicyAllow);
}
}
- 拿到服务器加签后的字符串唤起支付宝客户端失败.提示商家错误还是什么的,把字符串放到官方demo里运行,可以唤起成功,后来检查,是服务器后端有个字段多了一个空格
基本步骤:
- 创建应用,生成appkey和appID,进行注册
- 配置跳转白名单 URL Type
- 调用支付订单的方法
[[AlipaySDK defaultService] payOrder:params fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"支付宝支付结果result=%@",resultDic);
}];
```