-
集成
1.在項(xiàng)目的 build.gradle中,添加下面的內(nèi)容
dependencies {
// 添加下面的內(nèi)容
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.4.3'
// ... 其他依賴項(xiàng)
}
2.包名目錄下創(chuàng)建wxapi文件夾,此包(wxapi)下創(chuàng)建名為WXPayEntryActivity的Activity,并實(shí)現(xiàn)IWXAPIEventHandler接口
public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private IWXAPI iwxapi;
private static final String APP_ID = "您應(yīng)用的app_Id";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 由第三方App個(gè)性化展示支付結(jié)果
setContentView(R.layout.activity_wxpay_entry);
iwxapi = WXAPIFactory.createWXAPI(this, APP_ID,true);
iwxapi.registerApp(APP_ID);
iwxapi.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
iwxapi.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq baseReq) {
}
/**
* TODO 微信支付回調(diào)
*/
@Override
public void onResp(BaseResp baseResp) {
int errCode = baseResp.errCode;
if (errCode == 0) {
// 成功
} else if (errCode == -1) {
// 失敗
} else if (errCode == -2) {
// 取消
}
}
}
3.清單文件進(jìn)行注冊(cè)
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop" />
-
調(diào)試
流程1:調(diào)用微信支付統(tǒng)一下單接口
1.請(qǐng)求參數(shù)(點(diǎn)擊查看官方文檔)
// 必須參數(shù)
// 字段名 變量名 示例值 描述
① 應(yīng)用ID appid wxd678efh567hg6787(String) 微信開(kāi)放平臺(tái)審核通過(guò)的應(yīng)用APPID
② 商戶號(hào) mch_id 1230000109(String) 微信支付分配的商戶號(hào)
③ 隨機(jī)字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS(String) 不長(zhǎng)于32位
④ 商品描述 body 天天愛(ài)消除-游戲充值(String) 不長(zhǎng)于128位
⑤ 商戶訂單號(hào) out_trade_no 20190802000001(String) 只能是數(shù)字、大小寫字母_-|*且在同一個(gè)商戶號(hào)下唯一,不長(zhǎng)于32位
⑥ 總金額 total_fee 1(int) 單位為分
⑦ 終端IP spbill_create_ip 123.12.12.123(String) 不長(zhǎng)于64位(測(cè)試可以隨便填)
⑧ 通知地址 notify_url http://www.weixin.qq.com/wxpay/pay.php(String) 異步通知回調(diào)地址,不長(zhǎng)于256位(測(cè)試可以隨便填)
⑨ 交易類型 trade_type APP(String) JSAPI/NATIVE/APP/MWEB(4種交易類型)
⑩ 簽名 sign C380BEC2BFD727A4B6845133519F3AD6(String) 通過(guò)對(duì)以上參與統(tǒng)一下單的參數(shù)拼接后進(jìn)行簽名
2.用微信公眾平臺(tái)支付接口調(diào)試工具對(duì)簽名統(tǒng)一下單參數(shù)進(jìn)行簽名
統(tǒng)一下單參數(shù)進(jìn)行簽名(此為模擬數(shù)據(jù))
獲得簽名后的xml
3.利用postman訪問(wèn)微信統(tǒng)一下單接口
利用工具獲得的xml數(shù)據(jù)作為body請(qǐng)求微信接口
獲得預(yù)支付prepay_id
流程2:二次簽名統(tǒng)一下單數(shù)據(jù)
1.二次簽名的參數(shù)(點(diǎn)擊查看官方文檔)
// 必須參數(shù)
// 字段名 變量名 示例值 描述
① 應(yīng)用ID appid wxd678efh567hg6787(String) 微信開(kāi)放平臺(tái)審核通過(guò)的應(yīng)用APPID
② 商戶號(hào) partnerid 1230000109(String) 微信支付分配的商戶號(hào)
③ 隨機(jī)字符串 noncestr 5K8264ILTKCH16CQ2502SI8ZNMTM67VS(String) 調(diào)用微信統(tǒng)一下單接口返回的值
④ 擴(kuò)展字段 package Sign=WXPay(String) 固定值
⑤ 預(yù)支付交易會(huì)話ID prepayid wx02132841123196e97f4f04a41521284300(String) 調(diào)用微信統(tǒng)一下單接口返回的值
⑥ 時(shí)間戳 timestamp 1564644709(String) 單位為秒
2.用微信支付接口簽名校驗(yàn)工具獲取二次簽名
獲取二次簽名
3.App通過(guò)appid、partnerid、noncestr、package、prepayid、timestamp、sign這幾個(gè)參數(shù)調(diào)起微信App
-
發(fā)起微信支付
public static void wechatPay(Activity activity, String appId, String partnerId, String prepayId, String packageValue,String nonceStr, String timeStamp, String sign, String signType) {
if (activity == null)
return;
// 將該app注冊(cè)到微信
final IWXAPI wxapi = WXAPIFactory.createWXAPI(activity, appId);
if (!wxapi.isWXAppInstalled()) {
Toast.makeText(activity, "您尚未安裝微信客戶端", Toast.LENGTH_SHORT).show();
return;
}
PayReq request = new PayReq();
request.appId = appId;
request.partnerId = partnerId;
request.prepayId = prepayId;
request.packageValue = packageValue;
request.nonceStr = nonceStr;
request.timeStamp = timeStamp;
request.sign = sign;
request.signType = signType;
wxapi.sendReq(request);
}
-
企業(yè)付款到零錢(提現(xiàn))
-
注意事項(xiàng)
1 統(tǒng)一下單(sign_type不傳默認(rèn)md5簽名類型)和二次簽名必須使用同一種簽名類型
2 上述流程只是測(cè)試App能否調(diào)起微信支付,實(shí)際開(kāi)發(fā)則是用后臺(tái)接口返回的數(shù)據(jù)操作
3 發(fā)起微信支付最后一個(gè)參數(shù)(request.signType = signType;),需要后臺(tái)返回或約定簽名方式




