微信公众号(高质量文章推送):走向全栈工程师php
做者:陈博易html
声明:本文是我的原创,未经容许请勿转载前端
商业合做请在微信公众号回复:联系方式java
请参考微信支付开发文档 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1数据库
https://pay.weixin.qq.com/guide/inapp_payment.shtml编程
商户在微信开放平台申请开发应用后,微信开放平台会生成APP的惟一标识APPID。因为须要保证支付安全,须要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。后端
将微信提供给咱们的,wxapi的文件放到咱们的主包下面(重要的事情说三次)api
微信商户的基本参数安全
这是java后端作的事情,大概看看就好,咱们前端就发起支付就好bash
App支付成功之后,java后端会收到异步回调,也就是对数据库进行操做
/**
* Create by: 陈博易
* Date: 2017/12/1
* time: 16:01
* Email: 495057454@qq.com
* 微信公众号:走向全栈工程师
* <p>
* 微信支付 支付宝支付辅助类
*/
public class PaymentHelper {
private static final int SDK_PAY_FLAG = 1;
/**
* @param activity 调用的activity
* @param weChatPayEntity 微信调用参数
*/
public void startWeChatPay(Activity activity, WxChatPayEntity weChatPayEntity) {
if (activity == null || weChatPayEntity == null) {
return;
}
if (!WxPayConfig.APP_ID.equals(weChatPayEntity.getAppid())) {
return;
}
IWXAPI wxapi = WXAPIFactory.createWXAPI(activity, WxPayConfig.APP_ID, true);
// 将该app注册到微信
wxapi.registerApp(WxPayConfig.APP_ID);
PayReq req = new PayReq();
req.appId = WxPayConfig.APP_ID;
req.partnerId = weChatPayEntity.getPartnerid();
req.prepayId = weChatPayEntity.getPrepayid();
req.nonceStr = weChatPayEntity.getNoncestr();
req.timeStamp = weChatPayEntity.getTimeStamp();
req.packageValue = weChatPayEntity.getPackageValue();// "Sign=" +
req.sign = weChatPayEntity.getSign();
wxapi.sendReq(req);
}
/**
* @param activity 调用的activity
* @param alipayEntity 支付宝参数
*/
public void startAliPay(final Activity activity, final AlipayEntity alipayEntity) {
if (activity == null || alipayEntity == null) {
return;
}
Runnable payRunnable = new Runnable() {
@Override
public void run() {
// 构造PayTask 对象
PayTask alipay = new PayTask(activity);
// 调用支付接口,获取支付结果
String result = alipay.pay(alipayEntity.getPayInfo(), true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
PayResult payResult = new PayResult((String) msg.obj);
/**
* 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/
* detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
* docType=1) 建议商户依赖异步通知
*/
String resultInfo = payResult.getResult();// 同步返回须要验证的信息
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为“9000”则表明支付成功,具体状态码表明含义可参考接口文档
if (TextUtils.equals(resultStatus, "9000")) {
Toast.makeText(MyApplication.getContext(), "支付成功", Toast.LENGTH_SHORT).show();
} else {
// 判断resultStatus 为非"9000"则表明可能支付失败
// "8000"表明支付结果由于支付渠道缘由或者系统缘由还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小几率状态)
if (TextUtils.equals(resultStatus, "8000")) {
Toast.makeText(MyApplication.getContext(), "支付结果确认中", Toast.LENGTH_SHORT).show();
} else if (TextUtils.equals(resultStatus, "6001")) {
Toast.makeText(MyApplication.getContext(), "用户取消支付", Toast.LENGTH_SHORT).show();
} else {
// 其余值就能够判断为支付失败,包括用户主动取消支付,或者系统返回的错误
Toast.makeText(MyApplication.getContext(), "支付失败", Toast.LENGTH_SHORT).show();
}
}
break;
}
default:
break;
}
}
};
}
复制代码
微信开放平台提供的demo,有一些坑已经帮你们清除了,导入进去就能够支付了,就是代码不优雅
我的封装的demo(微信支付和支付宝支付案例都集成在一块儿了,直接复制黏贴)
请你们多关注关注我。
导入小编项目的姿式要对!
postman使用 Android java后端 接口调试工具
源码地址———关注微信公众号,回复:微信支付宝支付