app ios 回调 微信支付_app支付 安卓微信调起微信支付失败 ios可以 - CSDN
  • iOS集成H5微信支付实现跳转与回调的解决方案     前言 最近有个需求,不能在iOS客户端内集成支付宝和微信的App支付SDK(为了防苹果审核检测SDK),因此使用H5支付,虽然微信和支付宝的H5支付文档都说不要...

     

    iOS集成H5微信支付实现跳转与回调的解决方案

     


     

    前言

    最近有个需求,不能在iOS客户端内集成支付宝和微信的App支付SDK(为了防苹果审核检测SDK),因此使用H5支付,虽然微信和支付宝的H5支付文档都说不要在App内使用H5支付而是使用App支付,但办法总是有的。

    这篇讲的是H5微信支付如何从App跳转微信以及如何从微信跳转回App,支付宝的见这篇:

    iOS集成支付宝H5支付实现跳转与回调的解决方案

    实现的效果是:App→微信→支付(成功失败或取消)→App

    前置准备

    本项目使用WKWebView,前置动作是后端小伙伴已经处理好微信H5支付下单链接,客户端接收到下单链接后的操作。

    下单链接即为微信支付文档-统一下单API中返回的 mweb_url,格式为 https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2016121516420242444321ca0631331346&package=1405458241

    操作步骤

    1. 添加 URL Scheme 并把微信加入白名单

    添加 URL Scheme。在 xcodeproj 文件 Info 选项卡最下面的 URL Types内设置。 注意此URL的一级域名需要与微信商户后台(微信商户平台-产品中心-开发配置-H5支付)设置的的一级域名一致,比如微信商户里设置的是company.com,那 URL Schemes 可以设为 a1.company.com,此特性使得一套H5支付可以方便得集成到多个App。只有一个App需要H5支付的话也可以直接填与微信后台的一致的 company.com

    2019年4月10日更新
    如果像上图那样填的是 www.company.com,那 URL Scheme 只能设为其三级域名如 a2.www.company.com 或同样的 www.company.com

    把微信的 URL Scheme weixinwechat 填入项目的白名单。在 xcodeproj 文件 Info 选项卡内的 Custom iOS Target PropertiesLSApplicationQueriesSchemes 里添加上述两个字符串,若没有 LSApplicationQueriesSchemes 就手动输入添加,类型为数组 Array。

    2. WKWebView加载链接

    添加协议 WKNavigationDelegateWKUIDelegate

    创建一个WKWebView,并加载统一下单链接。

    - (void)buildWKWebView {
        WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, NAV_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT - NAV_HEIGHT)];
        [self.view addSubview:webView];
        webView.navigationDelegate = self;
        webView.UIDelegate = self;
        NSURL *payURL = [NSURL URLWithString:self.payString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:payURL];
        [request setValue:@"a1.company.com://wxpaycallback/" forHTTPHeaderField:@"Referer"];
        [webView loadRequest:request];
    }
    

    此处self.payString就是后台传来的微信H5支付统一下单链接,格式为 https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2016121516420242444321ca0631331346&package=1405458041

    我们需要做的处理是根据文档给这个请求添加请求头 Referer,关键在于这个 a1.company.com://wxpaycallback/ 既满足了微信检测到有商户后台设置好的一级域名,同时把这个链接做成了 URL Scheme 使得可以在跳转微信客户端后(不管支付成功还是失败)能顺利跳转回自己的App。其中的 host wxpaycallback/ 可以任意设置,方便在 AppDelegate 里处理跳转回来后部署业务逻辑。当然如果你不需要在 AppDelegate 里接收动作而是直接跳回支付界面自行后续处理的话就只用设为前一步在 URL Scheme a1.company.com:// 即可。

    2019.4.10 更新

    经过测试,对于App内的H5支付而言,实际上是下面步骤里
    @"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb"
    后接的参数 redirect_url 对支付后跳回App起作用,Referer只起到给微信校验的作用。

    所以 Referer 只需要设置成微信H5支付登记的域名的子域名即可,如
    [request setValue:@"a1.company.com" forHTTPHeaderField:@"Referer"];

    3. 实现代理方法拦截链接并跳转微信

    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
        
        NSURLRequest *request = navigationAction.request;
        NSString *absoluteString = [navigationAction.request.URL.absoluteString stringByRemovingPercentEncoding];
        
        // 拦截WKWebView加载的微信支付统一下单链接, 将redirect_url参数修改为唤起自己App的URLScheme
        if ([absoluteString hasPrefix:@"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb"] && ![absoluteString hasSuffix:[NSString stringWithFormat:@"redirect_url=a1.company.com://wxpaycallback/"]]) {
            decisionHandler(WKNavigationActionPolicyCancel);
            NSString *redirectUrl = nil;
            if ([absoluteString containsString:@"redirect_url="]) {
                NSRange redirectRange = [absoluteString rangeOfString:@"redirect_url"];
                redirectUrl = [[absoluteString substringToIndex:redirectRange.location] stringByAppendingString:[NSString stringWithFormat:@"redirect_url=a1.company.com://wxpaycallback/"]];
            } else {
                redirectUrl = [absoluteString stringByAppendingString:[NSString stringWithFormat:@"redirect_url=a1.company.com://wxpaycallback/"]];
            }
            NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:redirectUrl] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
            newRequest.allHTTPHeaderFields = request.allHTTPHeaderFields;
            newRequest.URL = [NSURL URLWithString:redirectUrl];
            [webView loadRequest:newRequest];
            return;
        }
        
        //拦截重定向的跳转微信的 URL Scheme, 打开微信
        if ([absoluteString hasPrefix:@"weixin://"]) {
            decisionHandler(WKNavigationActionPolicyAllow);
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                if ([[UIApplication sharedApplication] canOpenURL:navigationAction.request.URL]) {
                    [[UIApplication sharedApplication] openURL:navigationAction.request.URL];
                } else {
                    //未安装微信, 自行处理
                }
            });
            return;
        }
        
        decisionHandler(WKNavigationActionPolicyAllow);
        return;
    }
    

    4. AppDelegate 中接收跳转动作

    当然你也不一定需要在AppDelegate里接收返回动作,也可以直接返回支付界面,自行操作后续逻辑。

    以下是AppDelegate接收返回动作的示例。

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
        //safepay是支付宝H5支付的回调host
        if ([url.host isEqualToString:@"wxpaycallback"] || [url.host isEqualToString:@"safepay"]) {
            // 自行操作业务逻辑,比如使用通知请求查询订单状态,popView回上级页面等
            UITabBarController *tabBarVC = (UITabBarController *)topRootViewController;
            UINavigationController *navVC = tabBarVC.viewControllers[tabBarVC.selectedIndex];
            [navVC popViewControllerAnimated:YES];
            
            NSString *orderId = [[NSUserDefaults standardUserDefaults] objectForKey:@"PayOrderId"];
                NSString *payFee = [[NSUserDefaults standardUserDefaults] objectForKey:@"PayFee"];
                //以及更多参数
            NSDictionary *resultDict = @{@"order_id":orderId, @"payFee":payFee};
            [[NSNotificationCenter defaultCenter] postNotificationName:@"htmlPaymentNotification" object:self userInfo:resultDict];
        }
    }
    

    5. 关于微信H5支付域名设置

    2019年4月10日更新

    这里额外提一下,截止到2019年4月,微信支付设置页面明确说了

    添加域名后,其所属的子域名将都有权限

    也就是说只需要填一个一级域名比如 company.com ,就可以有无限多个二级域名可供不同App使用,绕过微信H5支付只能添加5个域名的限制。如果填的是二级域名比如 www.company.com,那么只能往下使用三级域名比如 a1.www.company.com

    以微信H5支付域名填了 company.com 为例,那可以这样操作

    App Alpha Beta-A1 Beta-A2 Gamma
    添加的Referer alpha.company.com a1.beta.company.com a2.beta.company.com gamma.company.com
    要替换的redirect_url alpha.company.com?/optional a1.beta.company.com?/ a2.beta.company.com?/optional gamma.company.com?/
    URL Scheme alpha.company.com a1.beta.company.com a2.beta.company.com gamma.company.com

    参考博客链接


    展开全文
  • 场景介绍 H5支付是指商户在微信客户端外的移动端网页展示...提醒:H5支付不建议在APP端使用,如需要在APP中使用微信支付,请接APP支付。 这个场景介绍来自微信H5支付的开发文档,说建议不要在APP端使用H5支付,但是

    场景介绍
    H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。
    主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。
    提醒:H5支付不建议在APP端使用,如需要在APP中使用微信支付,请接APP支付。

    这个场景介绍来自微信H5支付的开发文档,说建议不要在APP端使用H5支付,但是确实有这样的需求,我们来看看该怎么办?

    因为是直接通过网页链接调用,所以我们的APP并没有在微信SDK去注册,也并没有传输给微信对应的scheme,然后iOS的进程调用就是通过schme实现的。所以可以肯定的是在iOS APP发起H5微信支付这个需求,是不能实现微信向APP的回调跳转,因为调用了H5支付后,微信并不知道是哪个APP发生了这个操作,本来H5支付就是默认的网页支付和APP没有任何关系,我们现在只是在APP中打开了这个网页而已。
    回调实现不了,我们来看看能不能从APP通过网页向微信客户端跳转,还是温习一下iOS的进程跳转,通过给APP标识对应的scheme,然后调用openURL,传输scheme:xxxxx格式的URL完成对该APP的调用。这个scheme,有点类似http的一种协议,微信的APP的scheme为weixin。

    我们正常通过WKWebView打开支付网页完成支付跳转,发现无法完成跳转。在看网页返回了weixin:payxxxxxx样式的链接,然后没有反应,说明WKWebView识别不了weixin:协议,需要我们手动处理一下,直接上代码,如图:
    这里写图片描述
    这样的话,就能正常完成跳转到微信客户端了。

    经过实验发现,使用UIWebView可以通过weixin:xxxx格式的链接调用微信客户端。但是如果是先进入的是http:xxxx协议的网页,通过操作在返回给网页weixin:xxxx链接继续访问,则无论是在UIWebView和WEWebView下都不能完成对微信客户端的跳转。同样需要以上处理。

    关于网页开发对WKWebView的适配,大家可以参靠一下:
    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1483682025_enmey

    展开全文
  • 我这里用的是WKWebView,首先要实现WKNavigationDelegate协议 ...1、由H5页跳转微信客户端--WKNavigationDelegate方法 该方法是决定H5页面是否允许跳转的 -(void)webView:(WKWebView*)webView decidePolicyForNav...

    转载自:https://www.jianshu.com/p/30ca8b2c1235

    我这里用的是WKWebView,首先要实现WKNavigationDelegate协议

    1、由H5页跳转微信客户端--WKNavigationDelegate方法

    该方法是决定H5页面是否允许跳转的

    -(void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler{

        WKNavigationActionPolicy  actionPolicy = WKNavigationActionPolicyAllow;//允许

        NSString*urlString = [[navigationAction.request URL] absoluteString];

        urlString = [urlString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        NSLog(@"跳转:>>>???>>%@",urlString);

        //打开微信

        if([urlString containsString:@"weixin://wap/pay?"]) {

            actionPolicy =WKNavigationActionPolicyCancel;//不允许跳转

            NSURL*url = [NSURL URLWithString:urlString];

            if([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) {

                [[UIApplication sharedApplication] openURL:url options:@{UIApplicationOpenURLOptionUniversalLinksOnly: @NO} completionHandler:^(BOOL success) {

                }];

            }else{

                [[UIApplication sharedApplication]openURL:webView.URL];

            }

        }

        decisionHandler(actionPolicy); //这句是必须加上的,不然会异常

    }

     

    2、从微信客户端跳回APP

    很多小伙伴儿都遇到回跳的问题,点击“完成”或“取消”跳到了Safari却跳不回APP。

    1、配置 URL Types   添加schemes:www.xxxx.com

     

    2、配置 Referer

    [request setValue:@"www.xxxx.com://" forHTTPHeaderField:@"Referer"];

    3、服务器回调的URL中一定要写成  www.xxxx.com:// , 如果一定要拼接,可以让后台区分一下,如果是iOS 前面一定要写成 www.xxxx.com:// ,不然跳不回APP。

    注意:www.xxxx.com 此域名一定是H5授权的域名,如果是二级域名,可以写成:aaa.xxxx.com

    3、支付回来页面不刷新或产生空白页

    一般支付完不管完成与否都要调一下回调地址来刷新支付页面的,但问题是iOS的回调地址中一定要写成 www.xxxx.com:// 这样的格式才能跳回来,但是调回来后没有执行回调地址,页面又刷新不了,或者跳回来后是个空白页,这又产生了一个新的问题。当点击微信支付页上的“完成”或“取消”返回APP时,会调用 AppDelegate 中的 openURL: 方法

    -(BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options{ 

        // url.scheme 就是 www.xxxx.com ,你只需要在这做一个判断,如果是 www.xxxx.com 你就给外部发一个通知,那外部接收到这个通知,刷新界面就行了。

    那么问题又来了,刷新方法是什么呢??

    刷新地址也就是支付完的回调地址,后台可以把回调地址拼接在 www.xxxx.com:// 后面,例如:www.xxxx.com://http://www.baidu.com 。 那么 url 就是 www.xxxx.com:// http://www.baidu.com ,你向外部发通知时把 url 作为参数传出去即可 

    if ([url.scheme containsString:@"www.xxxx.com"]) {                                                                                          

    [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshWXH5Pay" object:nil userInfo:@{@"url":url}];                  

     }                                                                                                                                                                                                                      

    }

    //这是外部接收、处理通知的方法                                                                                                                                                                -(void)refreshOrderData:(NSNotification*)notifi{                                                                                                                   

    NSDictionary*dic = notifi.userInfo;                                                                                                                                             

    NSString*url = [NSString stringWithFormat:@"%@",dic[@"url"]];                                                                                          

    NSString*urlStr = [url substringFromIndex:14];  //截取 www.xxxx.com:// http://www.baidu.com    后面的部分                                                                                                    

    [self.webView loadRequest:[self getRequest:urlStraction:nil]];

    }



    作者:861488970
    链接:https://www.jianshu.com/p/30ca8b2c1235
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

     

    展开全文
  • 首先申请微信商家以及对应的平台等等,大多数APP已经在做微信支付的时候已经做了微信分享,所以在微信开放平台上的APP_ID,APP_KEY,APP_SECRET之类的拿来就能用,需要在商家平台上生成对应的密钥,如果需要做批量退款...

        iOS中APP的支付最常见的有三种(支付宝,微信,银联),百度钱包等没有太接触就不说了。这片博客先说下微信支付:

        1.首先申请微信商家以及对应的平台等等,大多数APP已经在做微信支付的时候已经做了微信分享,所以在微信开放平台上的APP_ID,APP_KEY,APP_SECRET之类的拿来就能用,需要在商家平台上生成对应的密钥(微信支付商户密钥, 32位, 这个, 不是微信开放平台给提供的, 这个是需要自己提供的 ,自己百度密钥生成器),如果需要做批量退款之类的就牵扯到微信证书之类的。

        2.把需要准备的账号信息弄好之后就下载对应的sdk然后导入自己的工程,在导入的工程中需要注意的是,lib文件夹全部导入工程,SDKExport文件夹下需要看你的项目,如果你已经做了微信分享(不管是友盟的还是share的)里面就有这个文件夹里的.a静态库以及两个.h文件就不需要再导入了,如果没有做分享就需要导入。另外就是MRC与ARC之间的转换。其他的话根据自己工程里的具体情况具体分析,每个人的工程都不一样。我就遇到了DeBug情况下自定义的NSLog输出行数的宏与Foundation的NSObjCRuntime中方法NSLog冲突的问题。不要怕一点一点找原因。

       3.当导入工程成功之后就按照微信的文档首先在AppDelegate里注册微信[WXApiregisterApp:APP_IDwithDescription:@"demo 2.0"];写微信的代理方法-(void) onResp:(BaseResp*)resp(用来支付成功后回调的,直接从demo复制)然后在工程的info选项里URL Types里添加微信选项(这个不会可以参考官方文档),接下来开始配置基本的支付参数等等(根据自己情况来修改)

    #define APP_ID          @"wx9999999999999"               //APPID
    #define APP_SECRET      @"f562ddddd4044b45f2ad642525ac258da" //appsecret
    //商户号,填写商户对应参数
    #define MCH_ID          @"123124344534"
    //商户API密钥,填写相应参数
    #define PARTNER_ID      @"asdasdsaddkgjhgafrwbmhfeudrgfzqfj"
    //支付结果回调页面
    #define NOTIFY_URL      @"http://<span style="font-family: Arial, Helvetica, sans-serif;">wxpay.weixin.qq.com</span><span style="font-family: Arial, Helvetica, sans-serif;">/forumWXPayReturn.html"</span>
    //获取服务器端支付数据地址(商户自定义)
    #define SP_URL          @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php"

       4.在需要支付的地方导入对应的头文件可参考官方文档,准备妥当(有些方法直接从demo里面复制)之后,看下微信的支付方法

    - (void)sendPay
    {
        
        //从服务器获取支付参数,服务端自定义处理逻辑和格式
        //订单标题
        NSString *ORDER_NAME    = @"Ios服务器端签名支付 测试";
        //订单金额,单位(元)
        NSString *ORDER_PRICE   = @"0.01";
        
        //根据服务器端编码确定是否转码
        NSStringEncoding enc;
        //if UTF8编码
        //enc = NSUTF8StringEncoding;
        //if GBK编码
        enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
        NSString *urlString = [NSString stringWithFormat:@"%@?plat=ios&order_no=%@&product_name=%@&order_price=%@",
                               SP_URL,
                               [[NSString stringWithFormat:@"%ld",time(0)] stringByAddingPercentEscapesUsingEncoding:enc],
                               [ORDER_NAME stringByAddingPercentEscapesUsingEncoding:enc],
                               ORDER_PRICE];
        
        //解析服务端返回json数据
        NSError *error;
        //加载一个NSURL对象
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
        //将请求的url数据放到NSData对象中
        NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
        if ( response != nil) {
            NSMutableDictionary *dict = NULL;
            //IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
            dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
            NSLog(@"%@",dict);
            NSLog(@"url:%@",urlString);
            if(dict != nil){
                NSMutableString *retcode = [dict objectForKey:@"retcode"];
                NSLog(@"retcode%@",retcode);
                if (retcode.intValue == 0){
                    NSMutableString *stamp  = [dict objectForKey:@"timestamp"];//???
                    
                    //调起微信支付
                    PayReq* req             = [[[PayReq alloc] init] autorelease];
                    req.openID              = [dict objectForKey:@"appid"];
                    req.partnerId           = [dict objectForKey:@"partnerid"];
                    req.prepayId            = [dict objectForKey:@"prepayid"];//???
                    req.nonceStr            = [dict objectForKey:@"noncestr"];//???
                    req.timeStamp           = stamp.intValue;
                    req.package             = [dict objectForKey:@"package"];//???
                    req.sign                = [dict objectForKey:@"sign"];//???
                    [WXApi sendReq:req];
                    //日志输出
                    NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",req.openID,req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );
                }else{
                    [self alert:@"提示信息" msg:[dict objectForKey:@"retmsg"]];
                }
            }else{
                [self alert:@"提示信息" msg:@"服务器返回错误,未获取到json对象"];
            }
        }else{
            [self alert:@"提示信息" msg:@"服务器返回错误"];
        }
    }
    

    微信的支付参数加密方式有两种,一种是自己将价格商品名字传入自己的后台然后后台返回你对应的参数(相对安全),一种是本地的参数加密,上面的方法是支付参数上传后台的方法,我用的是本地加密支付参数的方法,接下来看本地支付参数加密对应的支付方法:

    - (void)sendPay
    {
        if ([WXApi isWXAppInstalled]) {//检查是否安装微信
            NSLog(@"开始微信支付");
            //微信支付
            payRequsestHandler *payHandler = [[payRequsestHandler alloc] init];
            [payHandler init:APP_ID mch_id:MCH_ID];
            [payHandler setKey:PARTNER_ID];
            //        NSMutableDictionary *dic = [payHandler sendPay_demoWithProductName:@"萝卜" price:@"1" deviceInfo:@"APP-001"];//返回支付数据
            NSMutableDictionary *dic = [payHandler sendPay_demo];
            //发起支付
            if (dic) {
                PayReq *request = [[PayReq alloc] init];
                request.openID = dic[@"appid"];
                request.partnerId = dic[@"partnerid"];
                request.prepayId = dic[@"prepayid"];
                request.package = dic[@"package"];
                request.nonceStr = dic[@"noncestr"];
                request.timeStamp = [dic[@"timestamp"] intValue];
                request.sign = dic[@"sign"];
                //日志输出
                NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",request.openID,request.partnerId,request.prepayId,request.nonceStr,(long)request.timeStamp,request.package,request.sign );
                [WXApi sendReq:request];
            }
        } else {
            UIAlertController *alertC = [UIAlertController alertControllerWithTitle:nil message:@"设备没有安装微信" preferredStyle:(UIAlertControllerStyleAlert)];
            [alertC addAction:[UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:nil]];
            [alertC addAction:[UIAlertAction actionWithTitle:@"安装" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction *action) {
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/cn/app/wei-xin/id414478124?mt=8"]];
            }]];
    //        [self presentViewController:alertC animated:YES completion:nil];
        }
    }


    然后看lib文件夹下payRequsestHandler类中加密的方法,这个地方需要修改一下sendPay_demo放法把商品名字和价格传进去,然后查看下对应的参数是否都按照自己的工程对应,支付方法就完成了。

    5.回调方法,当支付完成后需要一个回调方法来刷新数据或者做一些其他的事情,微信的回调方法是

    //支付完成之后回调方法,可更新数据
    -(void) onResp:(BaseResp*)resp
    {
        NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
        NSString *strTitle;
        //SendMessageToWXResp类需根据具体情况修改
        if([resp isKindOfClass:[SendMessageToWXResp class]])
        {
            strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];
        }
        if([resp isKindOfClass:[PayResp class]]){
            //支付返回结果,实际支付结果需要去微信服务器端查询
            strTitle = [NSString stringWithFormat:@"支付结果"];
            
            switch (resp.errCode) {
                case WXSuccess:
                    strMsg = @"支付结果:成功!";
                    NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
                    break;
                    
                default:
                    strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
                    NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
                    break;
            }
        }
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }

    自己可根据情况具体修改。然后就可以测试你的支付了。想要深层次的学习 就需要自己看下官方文档和示例demo。另外如果手机没有安装微信客户端的情况下,不要提示用户去安装,因为可能遇到审核的人不小心把你的应用拒了。

                                 不要怂,就是干。



    展开全文
  • 加载h5页面点击支付调起需要支付的客户端(微信或者支付宝),原理上应该很简单,并且文档中都提供了相应的接口,当然想象总是很容易,实现起来还是出现很多的问题;比如无法微信/支付宝客户端下面是解决的代码...
  • 由于公司的业务需要,为了节省申请开通微信支付的时间和人力,公司决定使用微信h5支付。这样即节省了时间,同时以后所有的APP都能使用h5支付,既方便又快捷。但是真正做的时候问题来了,当你支付成功之后或者是取消...
  • 安卓、ios APP调用微信支付时,页面出现空白 我的后端是用php开发的。我是先调用微信的统一下单生成,生成prepay_id预支付订单号,代码如下: public function send_pay(){ //使用统一支付接口 $...
  • 微信官方提醒:H5支付不建议在APP端使用,如需要在APP中使用微信支付,请接APP支付,文档详见微信支付开发文档 场景:公司业务需要,在移动端App中引入了微信H5支付逻辑,支付流程Android没问题,但是在iOS端出现了...
  • 原因很简单,只要认真阅读微信支付文档就不会出现这种问题,方法如下 用户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID,在Xcode中打开项目如下图,设置项目属性中的URL schemes 为你的...
  • 微信、支付宝支付SDK安装 添加podFile文件 若还未使用cocoaPads的同学...微信支付 添加URLTypes > 单击项目 -> Info -> URL Types,URL Schemes为APPID [外链图片转存失败,源站可能有防盗链机制,建议将图片
  • 微信支付
  • 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些参数. 2. 下载微信支付sdk 3. 客户端请求订单,后台与微信后台...
  • 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些参数. 2. 下载微信支付sdk 3. 客户端请求订单,后台与微信后台交互,返回...
  • iOS: 实现微信支付

    2016-11-25 14:56:52
    现在正好我所做的项目中用到了微信支付,今天就来整理一下。   二、准备: 1、去微信官方开发者平台注册开发者账号:https://open.weixin.qq.com 2、然后登陆开发平台: 3、给项目对应的Bundle ...
  • iOSAPP跳转微信小程序

    2019-08-23 16:40:32
    iOSAPP跳转微信小程序前言准备工作集成微信书写跳转代码结语 前言 APP跳转微信小程序,首先先关注一下微信官方给的一些资料:移动应用拉起小程序功能、iOS开发示例、iOS资源下载。 准备工作 准备工作需要在微信公众...
  • iOS-关于微信支付

    2015-07-02 17:24:49
    iOS-关于微信支付最近项目要添加微信支付的功能,也是因为首次做微信支付,故笔记于下,避免下次又掉坑!1、申请接入详见 微信支付申请接入 。 创建应用+审核通过,你将得到:APP_ID、APP_SECRET、APP_KEY、PARTNER...
  • 后来由于业务需要在我们app的WebView中打开自己的网页版商城的网页,在商城网页中有微信支付按钮,测试反馈说ios可以微信支付,而android不可以。后来网上看到说微信内置Webview和其他第三方商城的网页(京东)也...
  • iOS 微信支付详解(业务流程和具体代码)前言微信支付在目前的移动开发中也是相当常用的技术,地位、意义的也就没什么必要再多说了。其实就微信支付这个开发技术点并不是很难的技术要点,中文文档也说的蛮清楚的。...
1 2 3 4 5 ... 20
收藏数 9,621
精华内容 3,848
关键字:

app ios 回调 微信支付