微信支付:
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;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);api = WXAPIFactory.createWXAPI(this, ConstUtils.WXID);api.handleIntent(getIntent(), this);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);}@Overridepublic void onReq(BaseReq baseReq) {}@Overridepublic 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中:
<activityandroid: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() {@Overridepublic 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();