1.开发前准备:Eclipse安卓环境
Eclipse版本:2019-12
ADT版本:23.0.2
Android:4.2.2(API16(使用AndroidSDK安装)(都到接入微信支付了,应该都知道)
JDK版本:jdk1.8.0_65
2.申请微信支付:
登入微信开发平台支付那一项应该是接入,点击按步骤申请就OK了
我遇到的问题:
其中需要上传四张支付界面截图但是官方给的例子是京东App的截图但是我们是游戏啊(我有点懵)最后打客服答案是(以王者荣耀为例):
1.版权页面(登陆界面有版权归某某公司所有之类的字样)
2.主界面(一般游戏首页界面)
3.支付产品界面(类似王者荣耀充值点券的那个界面)
4.客服解释需要备注,暂时没有申请支付,但是没找到备注的地方所以不需要也可以
3.下载微信安卓工程:
微信官网地址
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
提示:下面过程必须是在你的微信开发平台已经配置应用签名(微信官方有工具)及包名的前提
4.回到Eclipse:
1、新建一个Android工程,将微信官方中的以下文件拖进去,
2、修改以下三个文件的包名(自己Unity中包名),右键-Refactor-Rename
3、拖入Unity的jar包(找不到jar包位置,自行Google)步骤如下:
4、将以下文件删掉
5、排除项目警告及错误,因为有API版本原因会有些方法有警告,
我遇到的:SetBackGround 和 removeLayout改成不报警告的方法的就好了,(可能会出现Eclipse没有代码提示的问题,随便Google一下就解决了)
5、代码部分(终于到代码部分了)
新建一个名称为MainActivity的java类,步骤:右键-New-Class
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
public class MainActivity extends UnityPlayerActivity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
}
public void WeixinPay(String prepayid,String packagem,String noncestr ,String timestamp,String sign)
{
final Activity activity = UnityPlayer.currentActivity;
final Context context = activity.getApplicationContext();
Intent intent = new Intent(context,PayActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("prepayid", prepayid);
intent.putExtra("package", "Sign=WXPay");
intent.putExtra("noncestr", noncestr);
intent.putExtra("timestamp",timestamp);
intent.putExtra("sign",sign);
context.startActivity(intent);
}
}
PayActivity类如下修改
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
api.registerApp(Constants.APP_ID);
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
Intent intent = getIntent();
prepayid = intent.getStringExtra("prepayid");
packagem = intent.getStringExtra("package");
noncestr = intent.getStringExtra("noncestr");
timestamp = intent.getStringExtra("timestamp");
sign = intent.getStringExtra("sign");
PayReq req = new PayReq();
//req.appId = "wxf8b4f85f3a794e77"; // 测试用appId
req.appId = Constants.APP_ID;
req.partnerId = Constants.MCH_ID;
req.prepayId = prepayid;
req.nonceStr = noncestr;
req.timeStamp = timestamp;
req.packageValue = packagem;
req.sign = sign;
api.sendReq(req);
PayActivity.this.finish();
}
Constants如下修改
public class Constants
{
// APP_ID 替换为你的应用从官方网站申请到的合法appId
public static final String APP_ID = "";
//商户号 (申请支付通过后,会有一个商户号)
public static final String MCH_ID = "";
//API 秘钥
public static final String API_KEY = "";
public static class ShowMsgActivity {
public static final String STitle = "showmsg_title";
public static final String SMessage = "showmsg_message";
public static final String BAThumbData = "showmsg_thumb_data";
}
}
AndroidManifest如下修改
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="包名"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="26" />
<!-- Required 一些系统要求的权限,如访问网络等-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:label="@string/app_name" >
<activity
android:name="包名.MainActivity"
android:label="@string/app_name"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="unspecified">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="你的appid"/>
</intent-filter>
</activity>
<activity
android:name="包名.PayActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="behind"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<!--android:launchMode="singleTop">-->
</activity>
<activity
android:name="包名.wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="你的appid"/>
</intent-filter>
</activity>
<receiver
android:name=".AppRegister">
<intent-filter>
<action android:name="包名.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
</intent-filter>
</receiver>
</application>
</manifest>
下篇就开始是与Unity交互及对接微信支付接口的过程
我参考的文章:https://blog.csdn.net/RYC4612123/article/details/93509616