微信公衆號(高質量文章推送):走向全棧工程師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後端 接口調試工具
源碼地址———關注微信公衆號,回覆:微信支付寶支付