日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

调用支付jsapi缺少参数package_iOS微信支付(Swift)

發布時間:2023/12/10 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 调用支付jsapi缺少参数package_iOS微信支付(Swift) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

微信支付的iOS的Demo不言而喻,所有的參數都是后臺生成傳過來的,完全沒參考價值,并且有的注意點文檔上也沒說,現在我就說一下微信支付開發中需要注意的地方

項目配置

把實例項目中的一下文件拖到項目中

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

橋接文件中添加引用

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

項目配置選項卡Info中URL 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,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!

支付步驟

支付總體上分為兩步

  • 獲取prepayid(預付款ID)
  • 根據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)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。