微信支付服务器demo,集成微信支付(附带demo)

news/2024/7/3 5:29:19

首先忽略掉申请AppKey的步骤,直接从集成开始

1、cocopods集成SDK

pod 'WechatOpenSDK'

2、添加依赖库

SystemConfiguration.framework, libz.tbd, libsqlite3.0.tbd, libc++.tbd, Security.framework, CoreTelephony.framework, CFNetwork.framework.

3、设置URL Schemes为您的APPID

15fb9798f514

image.png

4、在Info.plist里面添加白名单

LSApplicationQueriesSchemes

15fb9798f514

image.png

5、在APPdelegate里面注册APPID

/** 微信支付 */

[WXApi startLogByLevel:WXLogLevelNormal logBlock:^(NSString *log) {

NSLog(@"log : %@", log);

}];

//向微信注册,发起支付必须注册

[WXApi registerApp:@"wxb4ba3c02aa476ea1" enableMTA:YES];

6、调起支付

+ (void)jumpToBizPay {

//============================================================

// V3&V4支付流程实现

// 注意:参数配置请查看服务器端Demo

// 更新时间:2015年11月20日

//--->实际项目代码

NSString *urlString = @"https://wxpay.wxutil.com/pub_v2/app/app_pay.php?plat=ios";

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

// NSLog(@"微信支付___URL=== %@,%@", url,self.orderId);

[DCServiceTool postWithUrl:url params:@{@"orderID":@"orderId"} success:^(id _Nonnull responseObject) {

if ([[responseObject objectForKey:@"code"] intValue] == 0) {

// 调起微信支付

PayReq *req = [[PayReq alloc] init];

// id dic = [responseObject objectForKey:@"data"];

// if ([dic isKindOfClass:[NSString class]]) {

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

// if ([str isEqualToString:@"PAY_SUCCESS"]) {

// /** 支付成功 处理 */

// // [weakself goToOrderDetailVC];

// DCLog(@"支付成功 处理 ---");

// return ;

// }

// return ;

// }

/** 微信分配的公众账号ID -> APPID */

req.openID = [responseObject objectForKey:@"appid"];

/** 商家向财付通申请的商家id */

req.partnerId = [responseObject objectForKey:@"partnerid"];

/** 预支付订单 从服务器获取 */

req.prepayId = [responseObject objectForKey:@"prepayid"];

/** 随机串,防重发 */

req.nonceStr = [responseObject objectForKey:@"noncestr"];

/** 时间戳,防重发 */

req.timeStamp = [[responseObject objectForKey:@"timestamp"] intValue];

/** 商家根据财付通文档填写的数据和签名 */

req.package = [responseObject objectForKey:@"package_"];

/** 商家根据微信开放平台文档对数据做的签名, 可从服务器获取,也可本地生成*/

req.sign = [responseObject objectForKey:@"sign"];

//日志输出

DCLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[responseObject objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );

if ([WXApi isWXAppInstalled] == YES) {

BOOL sss = [WXApi sendReq:req];

if (!sss ) {

[SVProgressHUD showWithStatus:@"微信sdk错误"];

[SVProgressHUD dismissWithDelay:1.0];

}

} else {

//微信未安装

[SVProgressHUD showWithStatus:@"您没有安装微信"];

[SVProgressHUD dismissWithDelay:1.0];

}

}else {

[SVProgressHUD showWithStatus:responseObject[@"msg"]];

[SVProgressHUD dismissWithDelay:1.0];

}

} failure:^(NSError * _Nonnull error) {

}];

}

7、支付结果回调

#pragma mark - WXApiDelegate

- (void)onResp:(BaseResp *)resp {

if([resp isKindOfClass:[PayResp class]]){

//支付返回结果,实际支付结果需要去微信服务器端查询

NSString *strMsg,*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];

}else {

}

}

- (void)onReq:(BaseReq *)req {

}

8、在appDelegate.m中整理判断回调

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

[WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];

return YES;

}

/**

这里处理微信支付完成之后跳转回来

*/

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

/** 微信支付回调 */

if ([url.host isEqualToString:@"pay"]) {

return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];

}

return YES;

}

// NOTE: 9.0以后使用新API接口

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

/** 微信的支付回调 */

if ([url.host isEqualToString:@"pay"]) {

return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];

}

return YES;

}

最后附上demo,写文章不易,希望能给个star哦


http://lihuaxi.xjx100.cn/news/268208.html

相关文章

AI最佳论文都在这里了!(非常全,快领!)

搞AI,很容易进入一个误区,就是只钻研自己的代码是否精进,而没有注意提升自己的阅读能力。实际上,一个专业的学术研究员或者AI研究员可能需要花费几百个小时来阅读论文,阅读论文可以帮助你深入原理,理解AI更…

Webpack系列-第一篇基础杂记

系列文章 Webpack系列-第一篇基础杂记 Webpack系列-第二篇插件机制杂记 Webpack系列-第三篇流程杂记 前言 公司的前端项目基本都是用Webpack来做工程化的,而Webpack虽然只是一个工具,但内部涉及到非常多的知识,之前一直靠CV来解决问题&#x…

DX11 preprocessor Dynamic shader linkage

(参照例子DXSDK sample:DynamicShaderLinkage11) 一、preprocessor 实现shader静态分支的经典方法,代码示例如下 shader中(如果显卡不支持DX11,则STATIC_PERMUTE为True): #if !defined( STATIC_PERMUTE )iB…

海思编码的理解

海思编码的流程: VI -> Vpss -> Vencode 这里的Vpss和Vencode绑定,首先Vpss创建VpssGrp组(这里的Vpss是有一个,但是芯片不同Grp数量是不同的),VpssGrp组下还有通道号VpssChn。这些通道号就可以和Venc…

我发现了个Python黑魔法,执行任意代码都会自动念上一段「平安经」

来源 | Python编程时光最近的"平安经"可谓是引起了不小的风波啊。作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG。为此,明哥今天分享一个 Python 的黑魔法,教你如何在你执行任意 Python 代码前&#xff…

crontab定时任务

Linux配置定时任务,大家都知道使用crontab这个系统功能,但有时候我们需要区分用户执行,下面就直接说一下2种方法的区别: 方法1: 使用命令 crontab -e 然后直接编辑定时脚本。 这样执行以后,属于用户自定…

Linux之复制、移动文件及目录命令

Linux之复制、移动文件及目录命令 1. 复制、移动文件及目录命令的使用 命令说明cp拷贝文件、拷贝目录mv移动文件、移动目录、重命名 cp命令效果图: 说明: 拷贝目录需要加上-r选项,-r表示递归拷贝目录及其内容 mv命令移动文件效果图 mv命令移动目录效果图 mv命令重…

海思系列芯片属性

Hi3531DV100 : 属性:芯片有 5 个 BT.1120 接口 Hi3536 2. 属性 :芯片有 1 个 BT.1120 接口,这个 BT.1120 接口对应一个 VI 设备。VI 设备可用 于时序采集,也可用于级联接收 VO 发来的数据