android自动微信支付平台,Android实现微信支付功能

开发Android APP微信支付功能,需要完成三个步骤:第一步生成预支付订单、第二步生成微信支付参数、第三步调起微信APP支付。除了需要审核通过的APP应用外,还需要获得微信支付接口权限,然后获取对应的商户号、API密钥,这两者缺一不可,并且在APP微信支付中使用

获得商户号、API密钥

在微信开放平台中查看审核通过的APP应用,是否申请支付功能,若已申请,登录微信支付|商户平台:http://pay.weixin.qq.com 查看对应的商户号、API密钥

》申请微信支付接口

b5c980dddddc0ed7b3cd1e8e33cd1631.png

》登录商户平台

df728ca7497f5bb1075fc7f29a0e8164.png

》查看商户号

baed8e40d0b366f4388dc3b07ff5342f.png

》获取API密钥

d950bc611fe6d591650906a2ea0b0cab.png

d3116e5bbc010543501269bf97d9ccea.png

第一步:生成预支付订单

将商品信息、商户信息使用BasicNameValuePair存放,然后存储在List列表中,并构造成xml字符串格式,以POST方式微信提供的接口:https://api.mch.weixin.qq.com/pay/unifiedorder发送数据,接收返回信息,获取prepay_id预支付订单编号

》生成订单请求

33e127cf19b875ec6988999f928d0b73.png

private String genProductArgs() {

StringBuffer xml = new StringBuffer();

try {

String nonceStr = genNonceStr();

xml.append("");

List packageParams = new LinkedList();

packageParams

.add(new BasicNameValuePair("appid", Constants.APP_ID));

packageParams.add(new BasicNameValuePair("body", "weixin"));

packageParams

.add(new BasicNameValuePair("mch_id", Constants.MCH_ID));

packageParams.add(new BasicNameValuePair("nonce_str", nonceStr));

packageParams.add(new BasicNameValuePair("notify_url",

"http://121.40.35.3/test"));

packageParams.add(new BasicNameValuePair("out_trade_no",

genOutTradNo()));

packageParams.add(new BasicNameValuePair("spbill_create_ip",

"127.0.0.1"));

packageParams.add(new BasicNameValuePair("total_fee", "1"));

packageParams.add(new BasicNameValuePair("trade_type", "APP"));

String sign = genPackageSign(packageParams);

packageParams.add(new BasicNameValuePair("sign", sign));

String xmlstring = toXml(packageParams);

return xmlstring;

} catch (Exception e) {

Log.e(TAG, "genProductArgs fail, ex = " + e.getMessage());

return null;

}

}

》获取预支付订单编号

737da14c198b7cddad3f86b7a5ab7e7a.png

String url = String.format("https://api.mch.weixin.qq.com/pay/unifiedorder");

String entity = genProductArgs();

Log.e("orion", entity);

byte[] buf = Util.httpPost(url, entity);

String content = new String(buf);

Log.e("orion", content);

Map xml = decodeXml(content);

第二步:生成微信支付参数

appId对应APP应用的APPID,partnerId对应商户号,prepayId对应第一步获得的预支付订单,packageValue取值Sign=WXPay,nonceStr是一串随机数,timeStamp生成的时间戳,sign对应APP签名

》支付参数配置

private void genPayReq() {

req.appId = Constants.APP_ID;

req.partnerId = Constants.MCH_ID;

req.prepayId = resultunifiedorder.get("prepay_id");

req.packageValue = "Sign=WXPay";

req.nonceStr = genNonceStr();

req.timeStamp = String.valueOf(genTimeStamp());

List signParams = new LinkedList();

signParams.add(new BasicNameValuePair("appid", req.appId));

signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));

signParams.add(new BasicNameValuePair("package", req.packageValue));

signParams.add(new BasicNameValuePair("partnerid", req.partnerId));

signParams.add(new BasicNameValuePair("prepayid", req.prepayId));

signParams.add(new BasicNameValuePair("timestamp", req.timeStamp));

req.sign = genAppSign(signParams);

sb.append("sign\n" + req.sign + "\n\n");

show.setText(sb.toString());

Log.e("orion", signParams.toString());

}

》nonceStr随机数

private String genNonceStr() {

Random random = new Random();

return MD5.getMessageDigest(String.valueOf(random.nextInt(10000))

.getBytes());

}

》timeStamp时间戳

private long genTimeStamp() {

return System.currentTimeMillis() / 1000;

}

》APP签名

private String genAppSign(List params) {

StringBuilder sb = new StringBuilder();

for (int i = 0; i < params.size(); i++) {

sb.append(params.get(i).getName());

sb.append('=');

sb.append(params.get(i).getValue());

sb.append('&');

}

sb.append("key=");

sb.append(Constants.API_KEY);

this.sb.append("sign str\n" + sb.toString() + "\n\n");

String appSign = MD5.getMessageDigest(sb.toString().getBytes())

.toUpperCase();

Log.e("orion", appSign);

return appSign;

}

第三步:调起微信APP支付

支付之前,需要手机安装微信客户端,如果没有,会提示下载安装微信,然后再调起支付,在AndroidManifest.xml文件中添加如下配置

android:name=".act.PayActivity"

android:exported="true"

android:launchMode="singleTop" >

》调起微信支付

842c91d25a6c7bf85a2b162e80e925d7.png

private void sendPayReq() {

msgApi.registerApp(Constants.APP_ID);

msgApi.sendReq(req);

}

接收微信返回结果

在实现了IWXAPIEventHandler接口的Activity中重写onResp(BaseResp)方法,接收微信结果

》接收支付结果

public void onResp(BaseResp resp) {

Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle(R.string.app_tip);

builder.setMessage(getString(R.string.pay_result_callback_msg,

resp.errStr + ";code=" + String.valueOf(resp.errCode)));

builder.show();

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值