swift版 关于微信支付的那点事

今天心情那真是想要强奸吉娃娃的冲动  说白了就是不想做和工作沾边的任何事  但是也不能闲着啊  时间那么贵  

之前就想把微信支付做一下  主要就是怕自己忘记了 今天难得有时间  就来简单的记录一下  旨在提高自己  

如果要在app中介入微信的支付功能  其实坑还是稍微有点多的   但是也不是不能解决  毕竟现在百度那么强大 

 

正事开启 

(1).首先你要去微信开放平台去注册一个账号  然后完成开发者认证 然后完成商户资料填写 然后还要在线签合同  填写账号资料  反正就是等等吧   这些的都不是今天要说的重点,今天要说的是在你上述资料都完事了之后  拿到APPID后来开发的过程 

(2).好哒 ,现在你已经拿到了appID的信息了 那么就来愉快的接入吧 

(3).其实到这一步,才是真正开启今天我要说的主题的  👻 

(4).下载微信的SDK 然后把 libWeChatSDK.a 、WXApi.h 、 WXApiObject.h 这三个文件拖到你的项目中去,并在Bridging-Header.h文件中添加如下两行代码

#import "WXApi.h"
#import "WXApiObject.h"
@import UIKit; //使用1.6版必须有(PS:1.5版可以不要)这句话你最好看一下

(5).然后加入这些依赖库 看准了哈 别加错了
SystemConfiguration.framework,libz.dylib,libsqlite3.0.dylib,libc++.dylib,Security.framework,CoreTelephony.framework

在pilst文件中加入应用的白名单 (你可以直接用文本编辑打开pilst文件,然后将下面的代码直接粘贴到 倒数第二行的上面,简单粗暴,但是很好使)

<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>


(6).设置URL Types
URL Schema中填写之前创建的应用的AppID
(7)在appdelegate里
注册一下你的应用
WXApi.registerApp(“你的应用ID”, withDescription: "wxin")

重写下面这个方法

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {

        print("openURL:\(url.absoluteString)")

        

        if url.scheme == WX_APPID {

            return WXApi.handleOpenURL(url, delegate: self)

        }

(8)接下来你就可以在你用到微信支付的地方直接调起微信了 

(微信支付和支付宝支付流程有些不一样,微信支付会在真正发起支付请求钱先发起PrePay(预支付)请求,然后利用PrePay发起支付请求。Demo中的PrePay是在客户端生成的,但是更加安全的方式是在服务端生成PrePay)

     /**

    微信支付方法

     :param: wxDict 从服务器返回来的字典数据

    */

    func sendWXPay(wxDict: [String: AnyObject]) {

        if !WXApi.isWXAppInstalled()  {//检查一下是否可以使用微信

            SwiftNotice.showText("未安装微信")

            return

        } else if !WXApi.isWXAppSupportApi() {

            SwiftNotice.showText("当前版本微信不支持微信支付")

            return

        }

        let req = PayReq()

         req.openID = wxDict["appid"] as! String

        req.partnerId = wxDict["partnerid"] as! String

        req.prepayId = wxDict["prepayid"] as! String

        req.package = wxDict["packageValue"] as! String

        req.timeStamp = UInt32(wxDict["timestamp"] as! String)!

        req.nonceStr = wxDict["noncestr"] as! String

        req.sign = wxDict["sign"] as! String

        WXApi.sendReq(req) //调起微信

    }

(9)处理微信支付完事之后的事情

 // MARK: - WXApiDelegate

      func onReq(req: BaseReq!) {//这个方法暂时好像用不到  不过你最好还是实现它

        

    }

    func onResp(resp: BaseResp!) {

        if resp.isKindOfClass(PayResp.classForCoder()) {

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

               switch resp.errCode {

            case WXSuccess.rawValue:

                print("支付成功")

                //在这里你是不是可以去干你想干的事了呢

                break

            default:

                //当然了 失败了也是要干事情滴

                break

            }

        }

      }

完事 大功告成 



 


 

原文链接: https://www.cnblogs.com/lwk151124/p/5980658.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    swift版 关于微信支付的那点事

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/242502

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午10:25
下一篇 2023年2月13日 下午10:25

相关推荐