微信支付
来源:互联网 发布:电信云计算发展措施 编辑:程序博客网 时间:2024/05/16 06:48
先介绍一下步骤
1 配置平台信息,这是基本条件,具体就不讲了。
2.微信支付必须跟后台相配合,本地生成订单->提交订单信息.->返回参数(订单ID 、支付ID*** 等一系列参数)
3.设置支付参数、本地MD5签名
4.调起微信支付
-(void)pay
{
// 拿到返回的订单参数后。indentData 则为提交订单后返回的参数
[ self chuanzhidata:indentData];
//调起微信支付 也是最后一步
NSMutableString *stamp = [dict objectForKey:@"timestamp"];
PayReq* req = [[PayReq alloc] init];
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"];
[WXApisendReq:req];
// 第一步
-(NSMutableDictionary *)chuanzhidata:(NSDictionary *)dicdata
{
//dicdata 向服务器提交支付订单的返回值。
//设置支付参数
NSString *time_stamp;
time_t now;
time(&now);
time_stamp = [NSString stringWithFormat:@"%ld", now];
NSString *appid = [NSStringstringWithFormat:@"%@",[[dicdataobjectForKey:@"weixin"]objectForKey:@"appid"]];
NSString *nonce_str = [[dicdata objectForKey:@"weixin"] objectForKey:@"nonce_str"];
NSString *package = @"Sign=WXPay";
NSString *mchid = [NSString stringWithFormat:@"%@",[[dicdata objectForKey:@"weixin"] objectForKey:@"mch_id"]];
time_stamp = time_stamp;
NSString *prePayid = [NSString stringWithFormat:@"%@",[[dicdata objectForKey:@"weixin"] objectForKey:@"prepay_id"]];
NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
[signParams setObject: appid forKey:@"appid"];
[signParams setObject: nonce_str forKey:@"noncestr"];
[signParams setObject: package forKey:@"package"];
[signParams setObject: mchid forKey:@"partnerid"];
[signParams setObject: time_stamp forKey:@"timestamp"];
[signParams setObject: prePayid forKey:@"prepayid"];
// [signParams setObject: @"MD5" forKey:@"signType"];
//生成签名,调用下一个方法
NSString *sign = [self createMd5Sign:signParams];
[signParams setObject: sign forKey:@"sign"];
return signParams;
}
//第二步
-(NSString*) createMd5Sign:(NSMutableDictionary*)dict //生成签名的方法
{
NSMutableString *contentString =[NSMutableString string];
NSArray *keys = [dict allKeys];
//按字母顺序排序
NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch];
}];
//拼接字符串
for (NSString *categoryId in sortedArray) {
if ( ![[dict objectForKey:categoryId] isEqualToString:@""]
&& ![categoryId isEqualToString:@"sign"]
&& ![categoryId isEqualToString:@"key"]
)
{
[contentString appendFormat:@"%@=%@&", categoryId, [dict objectForKey:categoryId]];
}
}
//添加key字段
[contentString appendFormat:@"key=%@", @"*************"]; //秘钥,可找后台拿到
//得到MD5 sign签名
NSString *md5Sign =[WXUtil md5:contentString];
//输出Debug Info
// [debugInfo appendFormat:@"MD5签名字符串:\n%@\n\n",contentString];
return md5Sign;
}
支付结果
appdelegate.m
-(void) onResp:(BaseResp*)resp
{
NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
NSString *strTitle;
if([resp isKindOfClass:[SendMessageToWXResp class]])
{
strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];
}
if([resp isKindOfClass:[PayResp class]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
strTitle = [NSString stringWithFormat:@"支付结果"];
switch (resp.errCode) {
case WXSuccess:
strMsg = @"支付结果:成功!";
break;
default:
strMsg = [NSString stringWithFormat:@"支付结果:失败"];
break;
}
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alert show];
}
- 微信、支付宝支付
- 支付宝,微信支付
- 微信支付【支付模式】
- 微信支付Jsapi支付
- 微信支付-刷卡支付
- 微信支付JSAPI支付
- 微信支付 h5 支付
- 支付--微信APP支付
- 微信支付:手机支付
- 支付宝 微信支付
- 支付宝-微信支付
- 微信支付与支付宝支付
- 支付宝支付与微信支付
- 微信支付和支付宝支付
- 微信支付与支付宝支付
- 支付宝支付和微信支付
- 微信支付和支付宝支付
- 支付宝支付接入+微信支付
- 【算法】LRU CACHE
- C语言字符串操作常用库函数
- PHP向客户端响应JSON格式数据
- Apache Camel中的recipientList和routingSlip的区别?
- Java易犯错误(转)
- 微信支付
- ios开发通知与消息机制
- Socket连接与HTTP连接
- [leetcode 274 275]H-Index I II
- 第7周工作周报
- SCHED_DEALINE调度类分析(二)
- shop++ CriteriaQuery 数据库查询语句
- UIApplication深入研究
- jQuery 实现 九九乘法表