微信支付:
1.添加依赖:
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
2. 报名下建文件夹wxapi
.
3.
我这里是有一个分享的回调 不用管那个 支付需要的是WXPayEntryActivity这个
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private Context context = this;
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, ConstUtils.WXID);
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp resp) {
Log.e("=====", resp.errCode + "");
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
if (resp.errCode == 0) {
Toast.makeText(this, "支付成功", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "支付失败", Toast.LENGTH_LONG).show();
}
finish();
}
}
}
4.在Androidmanifest中:
<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>
5.调用
IWXAPI api = WXAPIFactory.createWXAPI(TestActivity.this, ConstUtils.WXID);//AppId
PayReq req = new PayReq();
req.appId = response.body().getAppid();
req.partnerId = response.body().getPartnerid();
req.prepayId = response.body().getPrepayid();
req.nonceStr = response.body().getNoncestr();
req.timeStamp = response.body().getTimestamp();
req.packageValue = "Sign=WXPay";
req.sign = response.body().getSign();//签名后天返回的
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.registerApp(ConstUtils.WXID);
api.sendReq(req);
微信支付结束 其实都集成过好几次了 还是遇到了坑 后台那边选择了沙箱环境 转成为正式就没有问题了
支付宝支付:
导入支付宝 SDK
下载地址:https://download.csdn.net/download/mr___xu/10906070 (或者到官网下载)
一、将 alipaySdk-15.5.7-20181023110917.aar
包放在您的应用工程的 libs
目录下(图片中文件名仅做示例,请以实际 SDK 文件名为准):
二、在您主项目的 build.gradle
中,添加下面的内容,将 libs
目录作为依赖仓库:
allprojects {
repositories {
// 添加下面的内容
flatDir {
dirs 'libs'
}
// ... jcenter() 等其他仓库
}
}
三、在您 App Module 的 build.gradle 中,添加下面的内容,将支付宝 SDK 作为项目依赖:
dependencies {
// 添加下面的内容
compile (name: 'alipaySdk-15.5.7-20181023110917', ext: 'aar')
}
至此,支付宝 SDK 开发资源导入完成。
申请运行时权限
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.READ_PHONE_STATE
android.permission.WRITE_EXTERNAL_STORAGE
支付接口调用
PayTask对象主要为商户提供订单支付、查询功能,及获取当前开发包版本号。
获取PayTask支付对象调用支付(支付行为需要在独立的非ui线程中执行),代码示例:
final String orderInfo = info; // 订单信息
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(DemoActivity.this);
String result = alipay.payV2(orderInfo,true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
支付结果获取和处理
调用pay方法支付后,将通过2种途径获得支付结果:
同步返回
商户应用客户端通过当前调用支付的Activity的Handler对象,通过它的回调函数获取支付结果。(可参考alipay_demo实现)
代码示例:
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
Result result = new Result((String) msg.obj);
Toast.makeText(DemoActivity.this, result.getResult(),
Toast.LENGTH_LONG).show();
};
};
异步通知
商户需要提供一个http协议的接口,包含在请求支付的入参中,其key对应notify_url。支付宝服务器在支付完成后,会以POST方式调用notify_url传输数据。
获取当前开发包版本号
调用PayTask对象的getVersion()方法查询。
代码示例:
PayTask payTask = new PayTask(activity);
String version = payTask.getVersion();