社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
我们按照文档上来,首先是下载工具了,这里有win和mac两个地址,我是win,下载下来是这个样子的
我们按照图中的配置拿到了公钥和私钥
那我们可以配置了,我们找到项目详情
然后这里是两种方式,我们选择的是RSA方式么其实哪种方式都是可以的
1.将支付宝SDK拷贝到项目libs文件夹下,如果没有libs文件夹,就新建一个。
2.如果sdk使用过程中,提示找不到文件。
进行如下操作,选中sdk文件,右击选择Reveal in Finder
1.在商户应用工程的AndroidManifest.xml文件里面添加声明:
<activity android:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind">
</activity>
<activity android:name="com.alipay.sdk.auth.AuthActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind">
</activity>
和权限声明:
<uses android:name="android.permission.INTERNET">
<uses android:name="android.permission.ACCESS_NETWORK_STATE">
<uses android:name="android.permission.ACCESS_WIFI_STATE">
<uses android:name="android.permission.READ_PHONE_STATE">
<uses android:name="android.permission.WRITE_EXTERNAL_STORAGE">
在商户应用工程的proguard-project.txt里添加以下相关规则:
-libraryjars libs/alipaySDK-20150602.jar
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
第一行中的alipaySDK-20150602.jar,其中20150602是此版本发布的日期,注意将其修改为你导入的Jar的相应的文件名。
到这里,支付宝支付的前期配置已经完成,下面需要完成支付代码编写。
// 支付按钮
public void onClick(View view) {
//起一个线程
Runnable payRunnable = new Runnable() {
@Override
public void run() {
String data = null;
PayBean payBean = new PayBean();
payBean.setOrderTime("");
String json = new Gson().toJson(payBean);
//json为获取后端结果时需要提供给后端订单信息,例如:时间、金额、订单属性等
Log.i("charge request", json);
try {
//data为后端返回数据,其中包括订单字符串
data = postJson(CHARGE_URL, json);
} catch (IOException e) {
e.printStackTrace();
}
// Json解析data
ChargeBean charge = new Gson().fromJson(data, ChargeBean.class);
//获取调起支付所需要的字符串credential
String credential = (String) charge.getResult().getCredential();
// 调起支付界面
PayTask alipay = new PayTask(ThirdActivity.this);
Map<String> result = alipay.payV2(credential, true);
//在mHandler中处理支付宝返回结果
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == SDK_PAY_FLAG) {
Toast.makeText(ThirdActivity.this, (String) msg.obj,
Toast.LENGTH_LONG).show();
PayResult payResult = new PayResult((Map<String>) msg.obj);
/**
对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
*/
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
if (resultStatus.equals("9000")) {
Toast.makeText(ThirdActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
}else if (resultStatus.equals("4000")){
// 4000为支付失败,包括用户主动取消支付,或者系统返回的错误
Toast.makeText(ThirdActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
}else if (resultStatus.equals("6001")){
// 6001为取消支付,或者系统返回的错误
Toast.makeText(ThirdActivity.this, "取消支付", Toast.LENGTH_SHORT).show();
}else if (resultStatus.equals("8000")) {
// "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
Toast.makeText(ThirdActivity.this, "支付结果确认中", Toast.LENGTH_SHORT).show();
}else {
// 其他为系统返回的错误
Toast.makeText(ThirdActivity.this, "支付错误", Toast.LENGTH_SHORT).show();
}
}
}
};
微信支付:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!