最近朋友项目让帮忙加个支付,正好好久没弄过支付宝和微信了。就看了下,本以为挺简单的,可是还是踩了几个小时坑。在此记录下,方便以后查阅。
(其实这种大型第三方平台的对接都很简单的,即使是新手也不用有啥压力。细心跟着文档一步步走就好的。)
注意:各种第三方平台接入时,务必保证应用包名,签名和平台上配置的是统一的!!!!这一点非常关键。
包名就不多说了,没啥出错的可能。但是签名一定要保证统一。有的平台是可以配置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 '' } } }
官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
(这里只讨论Android端的接入,所以涉及到后台的就不细说了。)
这一步需要android配合,先在微信下载一个签名工具apk。
下载地址:https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
下载完之后安装,然后输入我们app的包名(务必保证是正式版签名的app),然后点击Get Signature按钮,下面会生成一个签名串。如下图:
得到签名串之后将这个签名和包名配置到后台。如下图:
现在Android Studio中直接用gradle就行了。(遥想当年被各种jar包支配的恐惧~ 都是泪...)
在app的build.gradle中的dependencies目录下添加:
//微信支付 implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'(因为我这里用的Studio3.4所以用“implementation”,老版本的话用“compile”)
OK导包结束,就这么简单。
调用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");
这里主要是后台的工作了,我们将订单号,金额等数据传给后台,后台返回我们调起支付宝的一些参数。最终调用如下:
var request = PayReq()//以下参数全由后台返回 request.appId = "" request.partnerId = "" request.prepayId = "" request.packageValue = "" request.nonceStr = "" request.timeStamp = "" request.sign = "" msgApi.sendReq(request)//发起支付请求
在项目包名根目录下创建一个文件夹: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步做完之后就可以开心的去支付了~~
官方文档地址:https://docs.open.alipay.com/204/105296/
我看的是支付宝2019-05.07更新的文档。说实话,简直挑不出毛病。写的非常清晰明了。
可以这么说,我本来想找到一个文档中容易出错或者不完善的地方,然后在此记录一下。不过至今没找到突破口~~
所以,支付宝支付大家直接看文档就行了,我就不献丑了。