欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Unity3d 微信SDK接入

程序员文章站 2022-03-03 22:02:25
微信Android和IOS SDK接入微信官方文档支付业务流程:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3微信SDK和Demo下载地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1#Android 篇微信支付集成官方文档:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/...

微信支付 Android和IOS 接入

微信官方文档
支付业务流程:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3
微信SDK和Demo下载地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1#

Android 篇
微信支付集成官方文档:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html
1、获取微信支付的APPID。
商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID,并开通微信支付功能。
2、创建Eclipse工程。
如果不太了解U3D和Android交互的可以参考以下链接:https://blog.csdn.net/wangningzk123/article/details/107158253
从官网上下载的Demo,导入Eclipse中
Unity3d 微信SDK接入
在自己的Eclipse工程中导入libammsdk.jar包,创建xxx.wxapi包名,复制WXPayEntryActivity.java文件到xxx.wxapi包名下,如你的bundleID是com.example.game就要创建com.example.game.wxapi。然后修改WXPayEntryActivity.java的onResp方法。

	public void onResp(BaseResp resp) {
		Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
		if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) //如果是微信支付
        {
            if(resp.errCode==0)//支付成功
            {      	
            }
            else if(resp.errCode==-2)//支付取消
            {
            }
            else//支付失败 
            {
            }
            UnityPlayer.UnitySendMessage("Main Camera","WeChatPayResult",  String.valueOf(resp.errCode)); //通知U3D支付结果
        }
        this.finish();//别忘记最后要将这个页面finish()
	}

最后在自己的MainActivity中添加如下方法:

	/** 微信支付 */
    private IWXAPI wxApi;
    public void  WeChatPay(String appId,String partnerId,String prepayId,String nonceStr,String timeStamp,String sign){
	   wxApi = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
        PayReq request = new PayReq();
        request.appId = appId;
        request.partnerId =partnerId;
        request.prepayId= prepayId;
        request.packageValue = "Sign=WXPay";
        request.nonceStr= nonceStr;
        request.timeStamp= timeStamp;
        request.sign = sign;		//签名方式可以微信支付官方文档
        Log.d("Unity",request.checkArgs()+"");//输出验签是否正确
        wxApi.sendReq(request);
    }

3、Unity中调用微信支付。

IOS篇
微信支付集成官方文档:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html
1、下载Demo导入WechtSDK1.8.2文件夹下的libWeChatSDK.a、WechatAuthSDK.h、WXApi.h、WXApiObject.h4个文件,导入Control文件夹下的WXApiManager.h、WXApiManager.m2个文件用于支付通知,然后修改WXApiManager.m的resp方法

#pragma mark - WXApiDelegate
- (void)onResp:(BaseResp *)resp {
    if([resp isKindOfClass:[PayResp class]]){
        //支付返回结果,实际支付结果需要去微信服务器端查询
        NSString *strMsg,*strTitle = [NSString stringWithFormat:@"支付结果"];
        
		NSString *lat; 
		lat = [NSString stringWithFormat:@"%d", resp.errCode];
		UnitySendMessage("Main Camera","WeChatPayResult", [lat UTF8String]);//通知U3D支付结果
		
        switch (resp.errCode) {
            case WXSuccess:
                strMsg = @"支付结果:成功!";
                NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
                break;
                
            default:
                strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
                NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
                break;
        }
        
    }else {
    }
}

2、创建iOSUtilUnity3dBridge.h和iOSUtilUnity3dBridge.mm文件,调用微信支付SDK,如需了解U3D和IOS交互的可参考以下链接:https://blog.csdn.net/wangningzk123/article/details/107359522
参考代码如下:

#import "iOSUtilUnity3dBridge.h"
#import "WXApi.h"

@implementation iOSUtilUnity3dBridge
	void _weChatPay(char *appid, char *partnerid, char *prepayid, char *noncestr, char *timestamp, char *sign, char *package)
	{
	    NSLog(@"Msg ==========_weChatSpend");
		PayReq *request = [[PayReq alloc] init];
		request.openID = [NSString stringWithUTF8String: appid];
		request.partnerId = [NSString stringWithUTF8String: partnerid];
		request.prepayId = [NSString stringWithUTF8String: prepayid];
		request.nonceStr = [NSString stringWithUTF8String: noncestr];
		//NSMutableString *stamp = [[NSString stringWithUTF8String: timestamp] mutableCopy];
		request.timeStamp = [[NSString stringWithUTF8String: timestamp] intValue];//stamp.intValue;
		request.package = [NSString stringWithUTF8String: package];
		request.sign = [NSString stringWithUTF8String:sign];
		[WXApi sendReq:request];
	}
@end

编写C#代码调用该方法

	[DllImport("__Internal")]
	private static extern void _weChatPay(string appid, string partnerId, string prepayId, string nonceStr, string timeStamp, string sign, string package);   //微信支付
	
	public static void WechatPay(string appId, string partnerId, string prepayId, string nonceStr, string timeStamp, string sign, string package)
	{
	    _weChatPay(appId, partnerId, prepayId, nonceStr, timeStamp, sign, package);
	}

3、 在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序 id(如下图所示)。
Unity3d 微信SDK接入
4、在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI(如下图所示)。
Unity3d 微信SDK接入
5、在 XCode 工程的 Build Phases -> Link Binary With Libraries 中点击下面的 + 号,添加类库
Security.framework、CoreTelephony.framework、SystemConfiguration.framework、libz.dylib、libsqlite3.0.dylib、libc++.dylib。
Unity3d 微信SDK接入
6、Unity中调用微信支付。

本文地址:https://blog.csdn.net/wangningzk123/article/details/107378537