android端微信支付的builder
来源:互联网 发布:2016旅行软件比例 编辑:程序博客网 时间:2024/06/07 12:11
<pre name="code" class="java">mPaymentBuilder.doPay();
public class PaymentBuilder {private Activity mActivity;private IWXAPI mMsgApi;private PayReq mPayReq;private Map<String, String> resultunifiedorder;private int mFeePrice;private String mTransactionNumber,mOrderDescription;private String mNotifyUrl;private String mAppId,mAppKey,mMchId;public PaymentBuilder(Activity activity) {mActivity = activity;mMsgApi = WXAPIFactory.createWXAPI(activity, null);resultunifiedorder = new HashMap<String, String>();}public PaymentBuilder registerPrice(int feePrice){mFeePrice = feePrice;return this;}public PaymentBuilder registerTransactionNumber(String transactionNumber){mTransactionNumber = transactionNumber;return this;}public PaymentBuilder registerNotifyUrl(String notifyUrl){mNotifyUrl = notifyUrl;return this;}public PaymentBuilder registerAppInfo(String appId,String appKey,String mchId){mAppId = appId;mAppKey = appKey;mMchId = mchId;return this;}public PaymentBuilder registerOrderDescription(String orderDescription){mOrderDescription = orderDescription;return this;}public void build(){mPayReq = new PayReq();GetPrepayIdTask getPrepayIdTask = new GetPrepayIdTask();getPrepayIdTask.execute();}public void doPay(){mMsgApi.registerApp(mAppId);mMsgApi.sendReq(mPayReq);}private long genTimeStamp() {return System.currentTimeMillis() / 1000;}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", mAppId));packageParams.add(new BasicNameValuePair("body", mOrderDescription));packageParams.add(new BasicNameValuePair("mch_id", mMchId));packageParams.add(new BasicNameValuePair("nonce_str", nonceStr));packageParams.add(new BasicNameValuePair("notify_url",mNotifyUrl));packageParams.add(new BasicNameValuePair("out_trade_no",mTransactionNumber));packageParams.add(new BasicNameValuePair("spbill_create_ip",getIp()));packageParams.add(new BasicNameValuePair("total_fee", mFeePrice+""));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) {return null;}}private void genPayReq() {mPayReq.appId = mAppId;mPayReq.partnerId = mMchId;mPayReq.prepayId = resultunifiedorder.get("prepay_id");mPayReq.packageValue = "prepay_id="+ resultunifiedorder.get("prepay_id");mPayReq.nonceStr = genNonceStr();mPayReq.timeStamp = String.valueOf(genTimeStamp());List<NameValuePair> signParams = new LinkedList<NameValuePair>();signParams.add(new BasicNameValuePair("appid", mPayReq.appId));signParams.add(new BasicNameValuePair("noncestr", mPayReq.nonceStr));signParams.add(new BasicNameValuePair("package", mPayReq.packageValue));signParams.add(new BasicNameValuePair("partnerid", mPayReq.partnerId));signParams.add(new BasicNameValuePair("prepayid", mPayReq.prepayId));signParams.add(new BasicNameValuePair("timestamp", mPayReq.timeStamp));mPayReq.sign = genAppSign(signParams);}private String genPackageSign(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);String packageSign = MD5.getMessageDigest(sb.toString().getBytes()).toUpperCase();Log.e("orion", packageSign);return packageSign;}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);String appSign = MD5.getMessageDigest(sb.toString().getBytes());Log.e("orion", appSign);return appSign;}private String toXml(List<NameValuePair> params) {StringBuilder sb = new StringBuilder();sb.append("<xml>");for (int i = 0; i < params.size(); i++) {sb.append("<" + params.get(i).getName() + ">");sb.append(params.get(i).getValue());sb.append("</" + params.get(i).getName() + ">");}sb.append("</xml>");Log.e("orion", sb.toString());return sb.toString();}private Map<String, String> decodeXml(String content) {try {Map<String, String> xml = new HashMap<String, String>();XmlPullParser parser = Xml.newPullParser();parser.setInput(new StringReader(content));int event = parser.getEventType();while (event != XmlPullParser.END_DOCUMENT) {String nodeName = parser.getName();switch (event) {case XmlPullParser.START_DOCUMENT:break;case XmlPullParser.START_TAG:if ("xml".equals(nodeName) == false) {xml.put(nodeName, parser.nextText());}break;case XmlPullParser.END_TAG:break;}event = parser.next();}return xml;} catch (Exception e) {Log.e("orion", e.toString());}return null;}private String getIp(){return "127.0.0.1";}private static String genNonceStr() {Random random = new Random();return MD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());}private class GetPrepayIdTask extends AsyncTask<Void, Void, Map<String,String>> {private ProgressDialog dialog;@Overrideprotected void onPreExecute() {dialog = ProgressDialog.show(mActivity, "加载中", "正在生成...");}@Overrideprotected void onPostExecute(Map<String,String> result) {if (dialog != null) {dialog.dismiss();}resultunifiedorder=result;genPayReq();}@Overrideprotected void onCancelled() {super.onCancelled();}@Overrideprotected Map<String,String> doInBackground(Void... params) {String url = String.format("https://api.mch.weixin.qq.com/pay/unifiedorder");String entity = genProductArgs();byte[] buf = Utils.httpPost(url, entity);String content = new String(buf);Map<String,String> xml=decodeXml(content);return xml;}}
使用方法:
首先,绘制一个页面,用来加载预支付,在页面oncreate里面实现代码:
mPaymentBuilder.registerAppInfo(Constants.APP_ID, Constants.API_KEY, Constants.MCH_ID).registerNotifyUrl("http://ncp.jiandaobaoapp.com").registerOrderDescription("农村电商").registerPrice(1).registerTransactionNumber(StringHelper.getGUIDString()).build();
0 0
- android端微信支付的builder
- android 集成支付宝支付的心路历程
- Android集成支付宝支付的大坑
- Android 支付宝支付的那些坑
- Android支付——改进的支付宝支付
- android builder
- 微信扫码支付的坑(android)
- android支付宝的使用
- android中移动支付 微信支付和支付宝支付的学习
- Android详细的对话框AlertDialog.Builder使用方法
- Android详细的对话框AlertDialog.Builder使用方法
- Android: 详细的对话框AlertDialog.Builder使用方法
- Android详细的对话框AlertDialog.Builder使用方法
- Android详细的对话框AlertDialog.Builder使用方法
- Android详细的对话框AlertDialog.Builder使用方法
- Android详细的对话框AlertDialog.Builder使用方法
- Android中Notification.Builder的使用方法
- Android详细的对话框AlertDialog.Builder使用方法
- Java权限基础
- hibernate利用mysql的自增长id属性实现自增长id和手动赋值id并存
- HDU 2602 Bone Collector(01二维背包&一维背包&滚动数组优化二维背包的原理 )
- winform设置子窗体的办法
- C# 切割超级大图(.bmp)[1G以上超大图片分块加载代码]
- android端微信支付的builder
- SVN 分支合并等~~
- Android lollipop 5.1 读取SIM卡联系人
- Android Handler在新线程中处理消息
- 计算2!* 2^i,并判断是否达到MAXINT
- java中的Class类
- pads9.5原理图中修改了封装库后怎样才能更新到PCB中
- GitLab使用总结
- iOS个人整理03-UIButton按钮