unity3D微信 IOS和Andoid支付

Andoid版本

微信官方文档

app端开发步骤:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5

SDK和Demo下载: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
如果你已经成功集成了微信登录和分享,那么此文将助你快速集成微信支付,此文基于微信支付SDK3.1.1,也就是目前为止最新的SDK

(1)微信官方的集成文档

(2)微信官方资源下载
不过我相信,即便你看了微信的官方文档,你依然不知道微信支付怎么集成,因为微信支付的官方文档简直太…..

如果你已经准备好了资源包,接下来正式开始集成
我们需要的资源其实有以下几样,在开始前,就这些转备好吧
1)微信支付的APPID
2)微信支付依赖包 >>> libammsdk.jar
3)一个Activity类 >>> WXPayEntryActivity.java

这里需要特别说明一下,这个Activity类,直接从上下载到的范例代码中copy到自己的工程中即可,这个页面是在你调起微信支付完成支付(或取消或失败)后,再回到你的App时会调用的一个页面。页面的布局可以是你自定义的布局,直接放图讲解:
先说一下这个类的路径,网上也有一大堆介绍了,我直接放图,路径一定,而且必须是这样的:
unity3D微信 IOS和Andoid支付_第1张图片
在这个类中需要注意的地方有两个:
1、这个类中的布局是可以自定义的,如果你不需要展示什么布局,而是要跳转页面,把这段代码删除即可
unity3D微信 IOS和Andoid支付_第2张图片
2、回调结果的处理

//支付结果回掉
    @Override
    public void onResp(BaseResp resp)
    {
        Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) //如果是微信支付
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle(R.string.app_tip);
            builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
            builder.show();
            if(resp.errCode==0)//支付成功
            {

            }
            else if(resp.errCode==-2)//支付取消
            {

            }
            else//支付失败 
            {

            }
        }
        this.finish();//别忘记最后要将这个页面finish()
    }

这个类中的其余的回调方法,我们都不需要去操作
支付请求参数
unity3D微信 IOS和Andoid支付_第3张图片
最后开始支付
unity3D微信 IOS和Andoid支付_第4张图片

至此我们已经可以调起微信支付页面来支付了
最后还有一个需要注意的是,很多人被这一步坑了,就是关于微信开放平台签名的问题。其实只要你手机上的程序的签名和你在微信平台登记的签名一致即可,无论是debug版本,还是release版本

IOS版本
在Xcode工程中:
1.下载微信支付SDK
2.SDK中包含libWeChatSDK.a,WXApi.h,WXApiObject.h WechatAuthSDK.h 4个文件,将SDK的文件放入到Unity工程的 Assets / Plugins / iOS 文件夹中。到构建 XCode 工程后,会直接存放于 XCode 工程的 Libraries/Plugins 文件夹中
3.在Xcode中将微信SDK的文件添加到搜索路径中
unity3D微信 IOS和Andoid支付_第5张图片
4.添加类库
SystemConfiguration.framework, libz.dylib, libsqlite3.0.dylib, libc++.dylib, Security.framework, CoreTelephony.framework, CFNetwork.framework
在 XCode 工程的 Build Phases -> Link Binary With Libraries 中点击下面的 + 号添加
unity3D微信 IOS和Andoid支付_第6张图片
5.、因为在3部已经将sdk所在目录添加到搜索路径中了,所以不需要在Search Paths中添加 libWeChatSDK.a ,WXApi.h,WXApiObject.h
6. 在“Info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id
unity3D微信 IOS和Andoid支付_第7张图片
7.info”标签栏的“LSApplicationQueriesSchemes“添加weixin
unity3D微信 IOS和Andoid支付_第8张图片
8.代码模块
接下来是3.2.7:在你需要使 用微信终端API的文件中import WXApi.h 头文件,并增加 WXApiDelegate 协议,这个操作我们在 UnityAppController.h 中完成(我们同样可以扩展UnityAppController.mm来进行这个操作,避免每次打包后重新修改UnityAppController,参考后续的扩展UnityAppController文章),查看下图中画线的地方:
unity3D微信 IOS和Andoid支付_第9张图片
UnityAppController.h中加入WXApiDelegate协议

接下来的在代码中使用工具包这一步的4.1我们在 UnityAppController.mm 中完成,首先找到文件中 didFinishLaunchingWithOptions 函数的位置,加入 [WXApi registerApp:@”wxa72a15850b99c773”];代码。

4.2中重写AppDelegate的handleOpenURL和openURL方法,Unity生成的代码中并不包含这两个函数,按文档中的代码直接增加即可。

4.3中实现WXApiDelegate协议的两个方法 onReq 和 sendReq 。这两个方法可以参考官方支付demo的代码,这里提供最简单的实现:
unity3D微信 IOS和Andoid支付_第10张图片
实现WXApiDelegate协议的两个方法 onReq 和 sendReq

至此,XCode中 微信支付SDK 的接入就全部完成了,而且这里我们已经在 XCode 中使用 UnitySendMessage 向 Unity 端发送支付结果,Unity中接收后根据结果进行处理即可。但我们还没有完成调用支付的功能,我们新建一个 .h 和 .m 文件,文件名随意,我这里使用 NativeBridge 来命名,在里面实现原生的调用微信支付的代码。这两个文件我们可以在构建后 XCode 中引入,也可以直接存放于 Unity 项目的 Assets / Plugins / iOS 中,构建时会自动存放于 XCode 工程的 Libraries 文件夹中。

在 NativeBridge.h 中写入代码:
这里写图片描述
NativeBridge.h中的代码

在 NativeBridge.m 中,写入代码:
unity3D微信 IOS和Andoid支付_第11张图片
NativeBridge.m中的代码

_WXPay是我们定义的调用微信支付的函数,参数全部使用 char *name 来传入,使用 [NSString stringWithUTF8String:name] 来转换为 NSString ,这里需要注意两点:

request.openID 必须赋值,这一条在官方文档中没有说明,是在百度其他教程时发现的,android端也是如此。另外iOS端没有appid,只有android端有。
timeStamp 必须是整形且为10位,精度是秒,上面代码中有转换方法。
如果调用时提示签名错误,那么很有可能是上面2点造成的。

调用的函数已经写好了,现在我们需要在 Unity 里面进行调用了,先引入原生代码中定义的调用函数:

引入原生代码中的调用函数
这里写图片描述

之后在需要的地方传入参数并进行调用,参数应由服务器返回:
unity3D微信 IOS和Andoid支付_第12张图片
Unity中调起微信支付

在微信支付处理完成或取消之后,会调用之前在 UnityAppController.mm 中定义的回调函数 OnResp ,再使用 UnitySendMessage 向 Unity 发送支付结果

你可能感兴趣的:(SDK)