前言

微信支付的iOS的Demo不言而喻,所有的参数都是后台生成传过来的,完全没参考价值,并且有的注意点文档上也没说,现在我就说一下微信支付开发中需要注意的地方

项目配置

把实例项目中的一下文件拖到项目中

Control文件夹下的WXApiManager.h和WXApiManager.m
libWeChatSDK.a
WXApi.h
WXApiObject.h

桥接文件中添加引用

//微信支付
#import "WXApi.h"
#import "WXApiObject.h"
#import "WXApiManager.h"

项目配置选项卡InfoURL Types中的添加一项

identifier 设置为 weixin
URL Schemes 设置为你app微信开放平台上的appid

在AppDelegate中注册

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {//微信支付WXApi.registerApp("你的APPID ");
}func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {return WXApi.handleOpenURL(url, delegate: WXApiManager.sharedManager());//return UMSocialSnsService.handleOpenURL(url);
}//这里演示多个共存的处理方法,其中中间是和微信有关的
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {//支付宝支付if(sourceApplication!.containsString("com.alipay.iphoneclient")){AlipaySDK.defaultService().processOrderWithPaymentResult(url, standbyCallback: nil)return true;}//微信支付else if(sourceApplication!.containsString("com.tencent.xin")){return WXApi.handleOpenURL(url, delegate: WXApiManager.sharedManager());}//友盟分享else{return UMSocialSnsService.handleOpenURL(url);}
}

需要的三个参数

appid (微信开放平台中获取)
partnerId (商户ID,在商户平台获取)
API_KEY (API密钥,在商户平台设置)

iOS开发交流技术群:[563513413](正在跳转),不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

支付步骤

支付总体上分为两步

  1. 获取prepayid(预付款ID)
  2. 根据prepayid发起支付

第一步获取prepayid 这一步比较变态,它不像平常我们请求接口那样传參,而是把参数和值又拼成XML,再写入request中,实现起来较麻烦,官方也是在后台去实现的,所以建议第一步在后台实现,app端直接掉后台提供的接口

第二步发起请求 这一步除下签名相对麻烦点其他都很简单

代码

let req = PayReq();
req.partnerId = LoadData.WX_PARTNERID;//商户ID
req.prepayId = prepayId;//预支付ID
req.nonceStr = nonceStr;//和第一步一样的随机数
req.timeStamp = UInt32(NSDate(timeIntervalSinceNow: 0).timeIntervalSince1970);//时间戳
req.package = "Sign=WXPay";//固定值var dic:[String:String] = [:];
dic["appid"] = LoadData.WX_APPID;//APPID
dic["partnerid"] = LoadData.WX_PARTNERID;//商户ID
dic["prepayid"] = prepayId;
dic["package"] = "Sign=WXPay";
dic["noncestr"] = req.nonceStr;
dic["timestamp"] = "(req.timeStamp)";//下面参数中的key是 API密钥
let sign = ZJ_WXPayUtils.getSign(dic, key: LoadData.WX_APIKEY);//获取签名
req.sign = sign;
WXApi.sendReq(req);

下面提供一下我用的工具类

import Foundation
import CryptoSwiftclass ZJ_WXPayUtils{static var xiadanUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";static var appid = "";//公众账号IDstatic var mch_id = "";//商户号static var nonce_str = "";//随机字符串static var sign = "";//签名static var body = "";//商品描述static var out_trade_no = "";//商户订单号static var total_fee:Int = 0;//总金额 单位为分static var spbill_create_ip = "";//终端IPstatic var notify_url = "";//通知地址static var trade_type = "JSAPI";//交易类型///获取随机数 包括from  包括tostatic func getRandomNum(from:Int,to:Int) -> Int{let result = Int(from + (Int(arc4random()) % (to - from + 1)));return result;}static func getSign(dic:Dictionary<String,String>,key:String) -> String{var sign = "";let dicNew = dic.sort { (a, b) -> Bool inreturn a.0 < b.0;}sign = getQueryStrByDic(dicNew);sign += "&key=(key)";sign = sign.md5().uppercaseString;return sign;}static func getQueryStrByDic(dic:[(String,String)])->String{var pars = "";for (index, element) in dic.enumerate() {if(index == 0){pars += "(element.0)=(element.1)";}else{pars += "&(element.0)=(element.1)";}}return pars;}}

工具类中用到的第三方库

pod 'CryptoSwift'

调用支付jsapi缺少参数package_iOS微信支付(Swift)相关推荐

  1. 调用支付jsapi缺少参数:total_fee_小程序支付问题怎么解决?

    微信小程序开发的过程一定会遇到各种问题,最让人棘手的就是支付问题,因为没有支付做商城类似的小程序就没有办法完成最关键的一步.那么支付失败到底什么原因呢?一下子收集了几个错误类似,希望对你有帮助: No ...

  2. 微信支付接口,提示:调用支付jsapi缺少参数: $key0$

    下面是 官方给的 帮助文档. 支付返回签名错误 注意签名参数的大小写,支付密钥key要到商户平台设置,设置的规则是32位数字与字母大小写的组合.以下链接为签名过程. (https://pay.weix ...

  3. 调用支付jsapi缺少参数appid_服务商模式下的小程序微信支付

    最近,要做一个小程序商城的项目,需要在小程序中用到分账功能,也就是顾客购买商品支付的钱要给各个店铺,这就需要用到服务商模式. 在谈服务商模式下小程序微信支付之前,我们先要有一个服务商的商户号,这个商户 ...

  4. EasyWechat微信支付jsapi缺少参数 total_fee

    这是因为使用了老版本的EasyWechat(3.x版本及以下),导致创建订单时,有时服务器IP(spbill_create_ip)会获取成ipv6的,有时候获取成ipv4,而微信那边又不认识ipv6, ...

  5. 调用支付jsapi缺少参数 total_fee

    在做微信支付的时候,使用的是easyWecha框架,https://easywechat.org/zh-cn/docs/payment.html 生成js代码调用微信发起支付的时候遇到[缺少参数 to ...

  6. 调用支付JSAPI缺少参数:appid

    最近做微信jsapi支付碰到了个问题,后台返回的数据都正确却显示缺少参数 代码: function jsApiCall() {alert(wxApi);WeixinJSBridge.invoke('g ...

  7. php微信支付jsapi,ThinkPHP中实现微信支付(jsapi支付)流程

    之前写过一篇文章讲了 PHP实现微信支付(jsapi支付)流程 ,详见文章:PHP实现微信支付(jsapi支付)流程. 当时的环境是没有使用框架的,直接在一个域名指向的目录下边新建目录之后访问该目录实 ...

  8. 11.23关于微信JSAPI缺少参数的问题解决

    今天解决了微信里面的一个坑 调用微信JSAPI接口的时候报错:JSAPI缺少参数total_fee 这个问题相似的还有缺少参数 appid 等一类问题,那么到底问题出在哪儿呢? 经过我的调试 ,有两种 ...

  9. 小程序 php wecahtpay,PHP 微信公众号,小程序获取支付参数。微信支付

    PHP 微信公众号,小程序获取支付参数.微信支付 发布时间:2018-09-26 11:19, 浏览次数:278 , 标签: PHP 首先下载微信官方demo放入项目中 地址:https://gith ...

最新文章

  1. Windows7是什么
  2. Android视图绘制流程完全解析,带你一步步深入了解View(二)
  3. php 过滤危险字符,php过滤特殊危险字符的总结
  4. Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转
  5. 语音基础知识-基本语音知识,声谱图,log梅普图,MFCC,deltas详解
  6. D: Starry的神奇魔法(矩阵快速幂)
  7. PowerDesigner通过jdbc连接MySQL实现逆向工程步骤
  8. static analysis tool
  9. mysql数据恢复或数据找回方法
  10. 计算机及软件工程专业职称,有关软件工程师职称
  11. itunes一直显示正在验证iphone恢复_超全面iPhone实用技巧汇总,有用收藏
  12. “移动媒体产品”的三个方向
  13. Macbook mac 系统安装 Anaconda的方法
  14. IE 11下载文件中文乱码解决(go/php)
  15. Grain Timers and Reminders
  16. hdu_1429 胜利大逃亡(续)
  17. 计算机专业我的理想作文,我的理想经典优秀作文
  18. Oracle导出导入dmp文件
  19. Centos桌面版无法打开Chrome浏览器
  20. 妻子,情人,红颜知己

热门文章

  1. 使用php创建一个注册表单,如何实现一个简单的注册表单
  2. 南京php基础学习,南京玄武区php培训有哪些(学习PHP的优点有哪些)
  3. 【C语言进阶深度学习记录】八 C语言中void的分析
  4. 吞吐量(TPS)、QPS、并发数、响应时间(RT)
  5. java实训 :异常(try-catch执行顺序与自定义异常)
  6. HDU5923-Prediction-有继承味道的并查集
  7. Spring-Boot——Cache
  8. Java并发编程笔记之Semaphore信号量源码分析
  9. 315. Count of Smaller Numbers After Self
  10. [dp]leetcode 746. Min Cost Climbing Stairs