前言
例如:干了那么多年的IT,支付是我们最常见的功能需求之一,一直没用关于支付的博客,今天就记录一下,顺便当自己的笔记,就不截图了,按照我的步骤整,不实现都难,有问题随时私信我。
一、支付的步骤是什么
一般不管是支付宝还是微信,在支付前,都需要调用后台接口得到一些支付配置参数,得到后根据自己选择的支付类型给相应的配置参数即可。
二、导入依赖
//支付宝
implementation 'com.alipay.sdk:alipaysdk-android:+@aar'
//微信支付
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.1.6'
三、实现步骤
1.支付宝支付
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()
}
2.支付宝回调
@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.微信支付
1.调用微信支付并传参(这里的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()
}
}
2.微信回调(在项目新建一个文件命名为wxapi,然后再文件下创建一个文件,文件代码如下)。
**
* @Author : CaoLiulang
* @Time : 2025/1/20 13:51
* @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" />
总结
总之呢,整个流程也不复杂,有的新手呢研究也需要些时间,再加上自己平常不太喜欢翻之前的项目,索性记录一下,方便各位也方便自己,得吃。