1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 微信支付宝sdk android Android 接入微信支付宝支付

微信支付宝sdk android Android 接入微信支付宝支付

时间:2020-11-16 01:55:18

相关推荐

微信支付宝sdk android Android 接入微信支付宝支付

按照惯例,首先通读一遍官网文档。微信支付

前期准备

微信开放平台

注册账号,创建应用,开通微信支付,这些大家都会的。

微信商户平台

1、APP支付文档

https://pay./wiki/doc/api/app/app.php?chapter=8_1 ,如果仅按照文档来,保证每次支付结果都是-1,对,只有-1,没有任何其他信息,不得不说,坑比。

2、APP支付时序图

大概了解下支付流程:

接入SDK

引入libs

SDK下载:https://pay./wiki/doc/api/app/app.php?chapter=11_1 ,将libammsdk.jar放到libs文件夹下

配置debug签名

创建应用需要填写应用签名,配置在debug下直接用的正式的key,这样就不用每次打包才能调起微信客户端signingConfigs{

debug{

storeFilefile("你的keystore路径")

storePassword"xxx"

keyAlias"xxx"

keyPassword"xxx"

}

release{

storeFilefile("你的keystore路径")

storePassword"xxx"

keyAlias"xxx"

keyPassword"xxx"

}

}

WXPayEntryActivity

这个文档没有半点介绍,WXPayEntryActivity是支付结束的回调,和微信分享WXEntryActivity类似,必须放在包名.wxapi下,页面可以自己写。

AndroidManifest.xml中注册

android:name=".wxapi.WXPayEntryActivity"

android:exported="true"

android:launchMode="singleTop"/>

网络权限注册不用说了。

支付接口调用/**

*微信支付

*@paramdata接口返回

*/

privatevoidweixinPay(Stringdata){

//通过WXAPIFactory工厂,获取IWXAPI的实例

IWXAPIapi=WXAPIFactory.createWXAPI(this,WEIXIN_APP_ID);

//将该app注册到微信

api.registerApp(WEIXIN_APP_ID);

LogUtil.d("data="+data);

try{

JSONObjectjson=newJSONObject(data);

PayReqreq=newPayReq();

req.appId=json.getString("appid");

req.partnerId=json.getString("partnerid");

req.prepayId=json.getString("prepayid");

req.nonceStr=json.getString("noncestr");

req.timeStamp=json.getString("timestamp");

req.packageValue=json.getString("package");

req.sign=json.getString("sign");

req.extData="appdata";//optional

//在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信

api.sendReq(req);

}catch(JSONExceptione){

e.printStackTrace();

}

}

为了安全,APP端调起支付的参数需要商户后台系统提供接口返回,参数说明文档:https://pay./wiki/doc/api/app/app.php?chapter=9_12&index=2

问题

以为这样就可以调起微信客户端支付了,没有想到一直返回支付结果为-1,没有多余的信息提示,不亏是微信,Android代码就是简洁!我们看到文档返回-1的提示“可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等”,我反复检查签名、APPID均没有错误,后台也确定sign信息正确,哎,我表示很无奈,iOS也调用了,他们提示”支付场景非法“,原来是由于后台之前做web支付,trade_type没有改成APP,改了我这边就能正常调起了。

支付宝接入

前期准备

注册账号,创建应用,开通支付功能,这些也不说了。

接入文档

https://doc./docs/doc.htm?spm=a219a.7386797.0.0.Eky59h&treeId=59&articleId=103563&docType=1

支付交互流程

接入SDK

SDK下载:

https://doc./docs/doc.htm?spm=a219a.7629140.0.0.Q5gnm8&treeId=193&articleId=104509&docType=1 ,

将alipaySdk-xxxxxxxx.jar包放到libs文件夹下

AndroidManifest.xml

添加权限

添加声明

android:name="com.alipay.sdk.app.H5PayActivity"

android:configChanges="orientation|keyboardHidden|navigation"

android:exported="false"

android:screenOrientation="behind">

android:name="com.alipay.sdk.auth.AuthActivity"

android:configChanges="orientation|keyboardHidden|navigation"

android:exported="false"

android:screenOrientation="behind">

支付接口调用

支付行为需要在独立的非ui线程中执行,代码如下:privateHandlermHandler=newHandler(){

@SuppressWarnings("unused")

publicvoidhandleMessage(Messagemsg){

switch(msg.what){

caseSDK_PAY_FLAG:{

@SuppressWarnings("unchecked")

PayResultpayResult=newPayResult((Map)msg.obj);

/**

对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。

*/

StringresultInfo=payResult.getResult();//同步返回需要验证的信息

StringresultStatus=payResult.getResultStatus();

//判断resultStatus为9000则代表支付成功

if(TextUtils.equals(resultStatus,"9000")){

//该笔订单是否真实支付成功,需要依赖服务端的异步通知。

Toast.makeText(mActivity,"支付成功",Toast.LENGTH_SHORT).show();

}else{

//该笔订单真实的支付结果,需要依赖服务端的异步通知。

Toast.makeText(mActivity,payResult.getMemo(),Toast.LENGTH_SHORT).show();

}

break;

}

default:

break;

}

}

;

};

/**

*支付宝

*/

privatevoidalipay(finalStringorderInfo){

RunnablepayRunnable=newRunnable(){

@Override

publicvoidrun(){

PayTaskalipay=newPayTask(mActivity);

Mapresult=alipay.payV2(orderInfo,true);

Log.i("msp",result.toString());

Messagemsg=newMessage();

msg.what=SDK_PAY_FLAG;

msg.obj=result;

mHandler.sendMessage(msg);

}

};

ThreadpayThread=newThread(payRunnable);

payThread.start();

}

同样为了安全,这里orderInfo是后台接口返回,参数说明文档:

https://doc./docs/doc.htm?spm=a219a.7629140.0.0.DwA283&treeId=59&articleId=103663&docType=1

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。