美文网首页
2020微信支付接入

2020微信支付接入

作者: 的的可可 | 来源:发表于2020-07-10 12:25 被阅读0次

最近有了点时间整理一下最新的微信支付接入的主要事项,以免后面踩坑。
我这里写的是把主要业务逻辑都放后台实现的方法,移动端直接调接口就行了,也是官方推荐的方法。
关于支付宝支付
先上官方文档:
APP端开发步骤官方文档
iOS接入指南官方文档
下面这个是自己关于Universal Links的一点小总结
关于Universal Links
三个结合一起看应该就没得啥大问题了。下面是一些代码方面的补充。

先到微信开放平台-管理中心-应用详情,获取一些之前注册后生成的数据。
如图:


截屏2020-07-10上午10.33.27.png
截屏2020-07-10上午10.34.51.png

在添加好白名单,Universal Links,Url Schemes之后就可以开始写代码了。

在 1:AppDelegate 的 didFinishLaunchingWithOptions 函数中向微信注册 id

#import <UIKit/UIKit.h>
#import "WXApi.h"

@interface AppDelegate : UIResponder<UIApplicationDelegate, WXApiDelegate>

@property (strong, nonatomic) UIWindow *window;

@end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //向微信注册
    //[WXApi registerApp:您的APP_ID enableMTA:YES];//sdk:1.8.6-
    [WXApi registerApp:您的APP_ID universalLink:您的UNIVERSAL_LINK];//sdk:1.8.6+
    return YES;
}
    

2:重写 AppDelegate 的 handleOpenURL 和 openURL 方法:

//ios9之后已经弃用
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return  [WXApi handleOpenURL:url delegate:self];
}

/**
iOS9以后该方法已经废弃,用一下方法替代
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [WXApi handleOpenURL:url delegate:self];
}
*/
//iOS9之后的的方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
   return [WXApi handleOpenURL:url delegate:self];
}

3:重写AppDelegate或SceneDelegate的continueUserActivity方法: 注意:适配了SceneDelegate的App,系统将会回调SceneDelegate的continueUserActivity方法,所以需要重写SceneDelegate的该方法。(微信支付SDK1.8.6+才调用这个代理方法)

//AppDelegate:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

/**
 SceneDelegate:中调用
 */
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
    [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

4:现在,你的程序要实现和微信终端交互的具体请求与回应,因此需要实现 WXApiDelegate 协议的两个方法:

-(void) onReq:(BaseReq*)reqonReq
{
    NSlog(@"微信支付回调");
}
/**照微信SDK Sample,在类实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意 一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。代码示例如下
  0:成功,成功展示页面
 -1:错误,可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
 -2:用户取消,无需处理。发生场景:用户不支付了,点击取消,返回APP。
*/
-(void)onResp:(BaseResp*)resp{
  if ([respisKindOfClass:[PayRespclass]]){
      PayResp*response=(PayResp*)resp;
      switch(response.errCode){
          caseWXSuccess:
                    //服务器端查询支付通知或查询API返回的结果再提示成功
                    NSlog(@"支付成功");
            break;
            default:
            NSlog(@"支付失败,retcode=%d",resp.errCode);
            break;
      }
        }
    }

然后你代码中业务逻辑的位置

1:想后台提交支付清单获取订单编号:orderNo
2:点击微信支付按钮的时候判断是否安装了微信

if (![WXApi isWXAppInstalled]) {//未安装支付
                [self showAlert:@"您还为安装微信"];
            }else{//已经安装微信
               //继续进行微信支付,给后台传订单号
            }

3:给后台传订单编号:orderNo,获取微信支付相关数据:PayReq。

/*! @brief 第三方向微信终端发起支付的消息结构体
 *
 *  第三方向微信终端发起支付的消息结构体,微信终端处理后会向第三方返回处理结果
 * @see PayResp
 */
@interface PayReq : BaseReq

/** 商家向财付通申请的商家id */
@property (nonatomic, copy) NSString *partnerId;
/** 预支付订单 */
@property (nonatomic, copy) NSString *prepayId;
/** 随机串,防重发 */
@property (nonatomic, copy) NSString *nonceStr;
/** 时间戳,防重发 */
@property (nonatomic, assign) UInt32 timeStamp;
/** 商家根据财付通文档填写的数据和签名 */
@property (nonatomic, copy) NSString *package;
/** 商家根据微信开放平台文档对数据做的签名 */
@property (nonatomic, copy) NSString *sign;

@end

4:唤起支付界面开始支付

#pragma mark - 调起微信支付页面
- (void)sendWeiChatPay
{
    //接收后台传回的数据后,装入model,将model中的数据传给req
                
    PayReq* req             = [[PayReq alloc] init];
    req.partnerId           = self.model.partnerid;/** 商家向财付通申请的商家id */
    req.prepayId            = self.model.prepayid;/** 预支付订单 */
    req.nonceStr            = self.model.noncestr;/** 随机串,防重发 */
    NSString *str = self.model.timeStamp;//NSString 转 UInt32
    UInt32 num;
    sscanf([str UTF8String], "%u", &num);
    req.timeStamp           = num;/** 时间戳,防重发,UInt32类型 */
    req.package             = self.model.package;/** 商家根据财付通文档填写的数据和签名 */
    req.sign                = self.model.sign;/** 商家根据微信开放平台文档对数据做的签名 */
    
/*两个自检函数,测完没得问题就注释掉,这里有个坑,这两个自检函数如果和调起微信支付函数同时存在的话,支付结果会返回“未知的应用请求”导致支付不成功
[WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) {
        NSLog(@"WeChatSDK+++++++++++: %@", log);
    }];
    //调用自检函数
    [WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {
        NSLog(@"step-----: %@, result.success---------: %u, result.errorInfo-------: %@, result.suggestion-----: %@", @(step), result.success, result.errorInfo, result.suggestion);
    }];
*/
    [WXApi sendReq:req];//调起微信支付1.8.6-
/*调起微信支付1.8.6+
    [WXApi sendReq:req completion:^(BOOL success) {
        if (success) {
            PHlog(@"--------: %@",@"支付成功");
         
        }else{
            PHlog(@"--------: %@",@"失败");
        }
    }];
    */
}

最后向后台确认支付结果。
需要swift版本的请参考swift版本

相关文章

  • 微信支付

    如何成为微信支付商户的方法: 腾讯客服-微信支付商户申请接入信息汇总:腾讯客服-微信支付商户申请接入信息汇总 腾讯...

  • 2020微信支付接入

    最近有了点时间整理一下最新的微信支付接入的主要事项,以免后面踩坑。我这里写的是把主要业务逻辑都放后台实现的方法,移...

  • 微信支付都进了苹果App Store,ios版微信恢复打赏还远吗

    观点 | 微信支付接入苹果应用商店App Store,就是苹果套路的胜利 8月29日,微信竟然宣布微信支付正式接入...

  • 微信App支付接入&支付流程

    微信App支付接入&支付流程 最近对微信App支付(App端集成微信支付SDK)申请步骤,以及终端在进行微信支付时...

  • Unity本地接入wechat-sdk-android-6.8.

    网上很多教程讲Unity接入微信支付的方法多是接入以前的微信支付SDK,但是因为已微信官方已经改用gradle形式...

  • 微信条码支付正式接入银联清算

    银联收编支付宝微信早已有传,近日,微信支付正式宣布将其条码支付业务接入银联,并由银联提供转接清算服务,但是接入的具...

  • android 微信 支付 接入流程总结

    [TOC] 客户端微信支付 android 接入微信指南android 资源下载页微信支付 开发文档 登录微信官方...

  • iOS 微信支付

    微信支付接入流程: 下载微信支付idk 地址: https://open.weixin.qq.com/cgi-bi...

  • 公众平台接入商户功能篇

    接入微信支付功能——商户功能 微信支付,提供用户身份识别、微信地址共享、支付结算、客户关系维护、售后维权、交易统计...

  • 如何将<微信APP支付>完全剥离成单独Module

    本文面向有一定微信APP支付(以下简称微信支付)接入经验的开发者 首先,我们先要明白微信支付的简单支付流程,流程如...

网友评论

      本文标题:2020微信支付接入

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