摘自网络,留存备以后有需要时使用。
Android之第三方支付(微信,支付宝)_android 微信支付-CSDN博客
支付宝还是微信,在支付前都需要调用后台接口得到一些支付配置参数,
得到参数后根据自己选择的支付类型给相应的配置参数。
- 导入依赖
//支付宝
implementation 'com.alipay.sdk:alipaysdk-android:+@aar'
//微信支付
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.1.6'
2.## 实现步骤
1.支付宝支付
//支付宝支付(orderStr是后台接口创建订单后返回的支付签名, 直接拿去支付即可,不行就是后台的问题)
fun aliPay(orderStr: String) {
val payRunnable = Runnable {
val alipay = PayTask(this@PointsRecharge)
var result: Map<String?, String?>? = null
try {
result = alipay.payV2(orderStr, true)
} catch (e: JSONException) {
e.printStackTrace()
}
val msg = Message()
msg.what = SDK_PAY_FLAG
msg.obj = result
mHandler.sendMessage(msg)
}
val payThread = Thread(payRunnable)
payThread.start()
}
支付宝回调
@SuppressLint("HandlerLeak")
private val mHandler: Handler = object : Handler() {
override fun handleMessage(msg: Message) {
when (msg.what) {
SDK_PAY_FLAG -> {
val payResult = PayResult(msg.obj as Map<String?, String?>)
/**
* 对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
*/
val resultInfo: String = payResult.getResult() // 同步返回需要验证的信息
val resultStatus: String = payResult.getResultStatus()
// 判断resultStatus 为9000则代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
ToastUtils.showToast(resources.getString(R.string.paysuccess))
} else {
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
ToastUtils.showToast(resources.getString(R.string.Paymentfailed))
}
}
else -> {}
}
}
}
2.微信支付
调用微信支付并传参(data是个对象,里面是微信的appid签名这些玩意,如果有问题找后台. 常见问题,后台返回参数不要大写必有问题,记得AndroidManifest注册这个文件)
//微信支付
fun wxPay(data: JSONObject) {
try {
api = WXAPIFactory.createWXAPI(this, null)
api.registerApp(data.getString("appid"))
val req: PayReq = PayReq()
req.appId = data.getString("appid")
req.partnerId = data.getString("partnerid")
req.prepayId = data.getString("prepayid")
req.nonceStr = data.getString("noncestr")
req.timeStamp = data.getString("timestamp")
req.packageValue = data.getString("packages")
req.sign = data.getString("sign")
api.sendReq(req)
} catch (e: JSONException) {
e.printStackTrace()
}
}
微信回调(在项目新建一个文件命名为wxapi,然后再文件下创建一个文件,文件代码如下)。
**
* @Author : 111222333
* @Time :
* @Description :微信支付回调
*/
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = "WXPayEntryActivity";
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
api = WXAPIFactory.createWXAPI(this, "wx8c717c202737f123");
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) {
}
@Override
public void onResp(BaseResp resp) {
int code = resp.errCode;
if (code == 0) {
ToastUtils.showToast("支付成功");
}
if (code == -1) {
ToastUtils.showToast("支付失败");
finish();
}
if (code == -2) {
ToastUtils.showToast("支付取消");
finish();
}
}
3.androidManifest 注册
<!--支付回调-->
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />