美文网首页
iOS微信支付——APP调用微信支付接口

iOS微信支付——APP调用微信支付接口

作者: andy_xin | 来源:发表于2018-02-28 11:38 被阅读152次

一、准备工作

1.必须通过微信审核的微信APPID 不然就没法实现微信支付功能

2.查看iOS微信支付官方文档去集成到你的工程文件中 微信支付官方文档

这两步做好后就可以开始调用微信支付接口来支付了,下面看具体怎么做

二 调起微信支付接口

2.1 集成微信支付SDK后在你的 AppDelegate.m 中注册微信的APPID


- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

//微信支付

[WXApi  registerApp:@"你的APPID"  withDescription:@"最好是填APP名"];

}

2.2  从自己的服务器获取订单的预支付信息,前提是服务器端已经调用了微信的统一下单接口

从服务器获取的信息中的信息是:

appid = 123456789;//从服务器获取的

"mch_id" = 1426349502;

"nonce_str" = Jtk3gcIfmsyYKyx7;

"prepay_id" = wx2017010311540938e8e489660575993008;

"result_code" = SUCCESS;

"return_code" = SUCCESS;

"return_msg" = OK;

sign = 562787A84AE02285F6AB3509C174491B;

"trade_type" = APP;

先看代码,再说明存在的坑

NSDate*datenow = [NSDatedate];//现在时间,你可以输出来看下是什么格式

//时间转时间戳的方法:

NSString*timeSp = [NSStringstringWithFormat:@"%ld", (long)[datenowtimeIntervalSince1970]];

NSLog(@"timeSp:%ld",(long)[timeSpintegerValue] );//时间戳的值

NSMutableDictionary*dic = [NSMutableDictionarydictionaryWithCapacity:10];

dic[@"appid"] =@"你的APPID";//可以写死,也可以写成 从服务器获取的appid,

dic[@"partnerid"] = responseObject[@"result"][@"mch_id"];//商户ID

dic[@"prepayid"] = responseObject[@"result"][@"prepay_id"];

dic[@"noncestr"] = responseObject[@"result"][@"nonce_str"];

dic[@"timestamp"] = [NSStringstringWithFormat:@"%ld",(long)[timeSpintValue]];

dic[@"package"] =@"Sign=WXPay";

BZLog(@"=====%@",dic);

NSMutableString*contentString=[NSMutable Stringstring];

NSArray*keys = [dicallKeys];

//按字母顺序排序

NSArray*sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(idobj1,idobj2) {

return[obj1 compare:obj2 options:NSNumericSearch];

}];

BZLog(@"+++++%@",sortedArray);

//拼接字符串

for(NSString*categoryIdinsortedArray) {

if(![[dic objectForKey:categoryId] isEqualToString:@""]

&& ![[dic objectForKey:categoryId] isEqualToString:@"sign"]

&& ![[dic objectForKey:categoryId] isEqualToString:@"key"]

)

{

[contentString appendFormat:@"%@=%@&", categoryId, [dicobjectForKey:categoryId]];

}

}

//添加商户密钥key字段API密钥

[contentStringappendFormat:@"key=%@",@"575fe81f69ad0dc054c35f478de8d70e"];

BZLog(@"contentString%@",contentString);

NSString*md5SignStr = [BZNetworkingManage MD5StrWithSignStr:contentString];//md5加密

//调起微信支付

PayReq*req= [[PayReqalloc]init];

req.partnerId= dic[@"partnerid"];//商户ID

req.prepayId= dic[@"prepayid"];

req.nonceStr= dic[@"noncestr"];

UInt32timeStamp =[dic[@"timestamp"]intValue];

req.timeStamp= timeStamp;

req.package=@"Sign=WXPay";

req.sign= md5SignStr;

[WXApisendReq:req];

存在的坑:

1.可能在调起微信后,只出现了一个确定按钮的界面的,点击确定返回回调值是 -2 ,出现这个问题所在的原因是req属性值错了,最有可能的原因是sign 错了

1.从服务器获取的预支付信息中有签名 sign ,开始的时候我也直接用这个 sign 赋值给req.sign ,但是出现了调起微信后只出现一个确定按钮,这就是sign的坑所在,不能用服务器返回的sign传过去,需要重新签名。具体参照上面的代码。

相关文章

  • iOS微信支付——APP调用微信支付接口

    一、准备工作 1.必须通过微信审核的微信APPID 不然就没法实现微信支付功能 2.查看iOS微信支付官方文档去集...

  • PHP支付接口教程,详解微信支付(三)

    微信APP支付 接口申请 微信APP支付和其他支付接口最大的不同在于——申请方式无论是JS支付、PC支付还是WEB...

  • iOS集成微信支付

    使用场景:商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户AP...

  • JSAPI 简介

    JSAPI 简介 JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款...

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

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

  • 【微信】支付

    公众号支付 调用微信js支付接口的页面,必须接口域名授权。在公众平台中设置,最多可以授权3个。 使用微信公众号支付...

  • iOS 微信支付/最新的微信支付详解

    iOS微信支付/最新的微信支付详解

  • 小程序-微信支付功能

    概述 先调用“统一下单”接口,在微信支付服务后台生成预支付交易单,返回正确的预支付交易后,再调起微信支付接口,发起...

  • 微信支付

    微信支付 VS 支付宝支付(1)没有安装微信app,是不能进行微信支付的(2)没有安装支付宝app,也能支付,支付...

  • 微信APP支付和退款(JAVA)

    微信APP支付和退款 微信支付流程说明 Java demo实例 退款 转账 1、微信支付 1 微信支付流程说明 本...

网友评论

      本文标题:iOS微信支付——APP调用微信支付接口

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