最近朋友项目让帮忙加个支付,正好好久没弄过支付宝和微信了。就看了下,本以为挺简单的,可是还是踩了几个小时坑。在此记录下,方便以后查阅。
(其实这种大型第三方平台的对接都很简单的,即使是新手也不用有啥压力。细心跟着文档一步步走就好的。)
注意:各种第三方平台接入时,务必保证应用包名,签名和平台上配置的是统一的!!!!这一点非常关键。
包名就不多说了,没啥出错的可能。但是签名一定要保证统一。有的平台是可以配置dbug版签名和release版签名两个,但是有的平台只能配置一个release版签名,这时我们调试的时候就很麻烦,甚至粗心的时候还会出错。可以临时在app的build.gradle中配置一下:
android {
signingConfigs {
release {
keyAlias '这里填签名别名'
keyPassword '这里填密码'
storeFile file('C:/Develop/APK/key/mykey.jks') 这里是示例,填写签名全路径
storePassword '这里填密码'
}
debug {//这里是dbug签名,临时填成发布版签名。方便调试,格式同上
keyAlias ''
keyPassword ''
storeFile file('')
storePassword ''
}
}
}
1.微信支付
官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
(这里只讨论Android端的接入,所以涉及到后台的就不细说了。)
1.1 后台配置签名和包名
这一步需要android配合,先在微信下载一个签名工具apk。
下载地址:https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
下载完之后安装,然后输入我们app的包名(务必保证是正式版签名的app),然后点击Get Signature按钮,下面会生成一个签名串。如下图:
得到签名串之后将这个签名和包名配置到后台。如下图:
1.2 导包
现在Android Studio中直接用gradle就行了。(遥想当年被各种jar包支配的恐惧~ 都是泪...)
在app的build.gradle中的dependencies目录下添加:
//微信支付
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
(因为我这里用的Studio3.4所以用“implementation”,老版本的话用“compile”)
OK导包结束,就这么简单。
1.3 注册APPID
调用API前,需要先向微信注册您的APPID,Kotlin代码如下:
val msgApi = WXAPIFactory.createWXAPI(this, null)
// 将该app注册到微信
msgApi.registerApp("这里填APPID")
java代码如下:
final IWXAPI msgApi = WXAPIFactory.createWXAPI(this, null);
//将该app注册到微信
msgApi.registerApp("这里填APPID");
1.4 调起支付
这里主要是后台的工作了,我们将订单号,金额等数据传给后台,后台返回我们调起支付宝的一些参数。最终调用如下:
var request = PayReq()//以下参数全由后台返回
request.appId = ""
request.partnerId = ""
request.prepayId = ""
request.packageValue = ""
request.nonceStr = ""
request.timeStamp = ""
request.sign = ""
msgApi.sendReq(request)//发起支付请求
1.5 添加支付回调函数
在项目包名根目录下创建一个文件夹:wxapi并把WXPayEntryActivity拷进去。(WXPayEntryActivity在官方demo中有,本文下面也会贴出)。目录创建位置如图:
这是一个容易出问题的地方,切记,要在包名根目录添加wxapi文件夹。
WXPayEntryActivity代码如下:
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private String TAG = "WXPayEntryActivity";
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result);
api = WXAPIFactory.createWXAPI(this, MyApplication.WxAPPID);
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
Log.i("onReq", "onPayFinish, openId = " + req.openId);
}
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
//在这里通过errCode判断支付状态并进行处理
Log.i("微信支付", "errCode:" + resp.errCode);
Log.i("微信支付", "errStr:" + resp.errStr);
}
}
}
然后在AndroidManifest中声明这个Activity。代码如下:(注意android:exported="true"一定要加)
<!--微信支付-->
<activity
android:name=".wxapi.WXPayEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
以上5步做完之后就可以开心的去支付了~~
2.支付宝支付
官方文档地址:https://docs.open.alipay.com/204/105296/
我看的是支付宝2019-05.07更新的文档。说实话,简直挑不出毛病。写的非常清晰明了。
可以这么说,我本来想找到一个文档中容易出错或者不完善的地方,然后在此记录一下。不过至今没找到突破口~~
所以,支付宝支付大家直接看文档就行了,我就不献丑了。