宁波妇儿医院网上挂号,不会穿衣打扮怎么办,公安部王菲
开发android app微信支付功能,需要完成三个步骤:第一步生成预支付订单、第二步生成微信支付参数、第三步调起微信app支付。除了需要审核通过的app应用外,还需要获得微信支付接口权限,然后获取对应的商户号、api密钥,这两者缺一不可,并且在app微信支付中使用
获得商户号、api密钥
在微信开放平台中查看审核通过的app应用,是否申请支付功能,若已申请,登录微信支付|商户平台: 查看对应的商户号、api密钥
》申请微信支付接口
》登录商户平台
》查看商户号
》获取api密钥
第一步:生成预支付订单
将商品信息、商户信息使用basicnamevaluepair存放,然后存储在list列表中,并构造成xml字符串格式,以post方式微信提供的接口:https://api.mch.weixin.qq.com/pay/unifiedorder 发送数据,接收返回信息,获取prepay_id预支付订单编号
》生成订单请求
private string genproductargs() { stringbuffer xml = new stringbuffer(); try { string noncestr = gennoncestr(); xml.append("</xml>"); list<namevaluepair> packageparams = new linkedlist<namevaluepair>(); 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; } }
》获取预支付订单编号
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<string, string> 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<namevaluepair> signparams = new linkedlist<namevaluepair>(); 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<namevaluepair> 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文件中添加如下配置
<activity android:name=".act.payactivity" android:exported="true" android:launchmode="singletop" > <intent-filter> <action android:name="android.intent.action.view" /> <category android:name="android.intent.category.default" /> <data android:scheme="wxf2f565574a968187" /> </intent-filter> </activity>
》调起微信支付
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(); } }
本文已被整理到了《android微信支付教程汇总》,《android微信开发教程汇总》,欢迎大家学习阅读。
以上就是本文的全部内容,希望对大家的学习有所帮助。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论