日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

接入第三方SDK-微信支付

發(fā)布時(shí)間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 接入第三方SDK-微信支付 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

準(zhǔn)備工作:

  • 首先去微信開(kāi)發(fā)者平臺(tái)中注冊(cè)好自己的應(yīng)用,并申請(qǐng)支付權(quán)限,得到appkey;且在
    微信平臺(tái)中下載獲得簽名工具,輸入包名獲取簽名填寫(xiě)到開(kāi)發(fā)者平臺(tái)中去(這一步必須要有);
  • 導(dǎo)入微信的libs包libammsdk.jar;
  • 創(chuàng)建一個(gè)“應(yīng)用包名+wxapi“+包名的包;
  • //回調(diào)Actvity,用于支付后的回調(diào) public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";private IWXAPI api;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.pay_result);api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);api.handleIntent(getIntent(), this);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);}@Overridepublic void onReq(BaseReq req) {}@Overridepublic void onResp(BaseResp resp) {Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {if("0".equals(String.valueOf(resp.errCode))){Utils.newInstance().showToast(WXPayEntryActivity.this, "支付成功");}if("-1".equals(String.valueOf(resp.errCode))){Utils.newInstance().showToast(WXPayEntryActivity.this, "未知錯(cuò)誤,請(qǐng)聯(lián)系客服");finish();}if("-2".equals(String.valueOf(resp.errCode))){(WXPayEntryActivity.this, "支付已取消");finish();}}} }
    • 調(diào)用微信支付

    /*** 因?yàn)槲⑿沤o的官方demo是連在一起的* 我現(xiàn)在把他拆開(kāi)來(lái),方便大家看的更清楚點(diǎn)*/private void WeiXinPay() {// TODO Auto-generated method stubUtils.showToast(context, "微信支付啟動(dòng)中...請(qǐng)稍后");GetPrepayIdTask getPrepayId = new GetPrepayIdTask();getPrepayId.execute();}
    • 傳入商品信息數(shù)據(jù),生成訂單json數(shù)據(jù),這邊可以使用微信寫(xiě)好的方法;不過(guò),大家最好整理一下代碼;微信的源碼有點(diǎn)亂。
    private class GetPrepayIdTask extends AsyncTask<Void, Void, Map<String, String>> {@Overrideprotected void onPreExecute() {}@Overrideprotected void onPostExecute(Map<String, String> result) {WeixinPay.resultunifiedorder = result;WeixinPay.genPayReq(); //查看返回訂單數(shù)據(jù) Log.e("tag","resultunifiedorder=="+WeixinPay.resultunifiedorder);api.sendReq(WeixinPay.req);}@Overrideprotected void onCancelled() {super.onCancelled();}//這邊注意注釋下的這幾點(diǎn)@Overrideprotected Map<String, String> doInBackground(Void... params) {//這邊微信使用已“分”為單位,這里要注意噢~~int a = (int) (Double.valueOf(fee) * 100);String url = String.format("https://api.mch.weixin.qq.com/pay/unifiedorder");/**“NO”為訂單號(hào),自己服務(wù)器生成的,“a”為金額要轉(zhuǎn)換String格式(微信要* 求的),"HttpHelp.BuyCallback",為通知服務(wù)器回調(diào)url;*/String entity = WeixinPay.genProductArgs(NO, String.valueOf(a),HttpHelp.BuyCallback);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);return xml;}}public 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) {//實(shí)例化student對(duì)象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;}
    • 序列化訂單數(shù)據(jù),用于生成xml訂單數(shù)據(jù),發(fā)送給微信調(diào)用起微信支付;
    /*** 類(lèi)說(shuō)明:* @author MyT* @version 創(chuàng)建時(shí)間:20152015-10-8 下午5:00:40 */ public class WeixinPay {private static final String TAG = "MicroMsg.SDKSample.WeixinPay";public static Map<String,String> resultunifiedorder=new HashMap<String, String>();public static PayReq req=new PayReq();public static String genProductArgs(String name, String total,String url) {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));//微信appidpackageParams.add(new BasicNameValuePair("body", "*******"));//商品備注packageParams.add(new BasicNameValuePair("mch_id", Constants.MCH_ID));//商戶(hù)IDpackageParams.add(new BasicNameValuePair("nonce_str", nonceStr));packageParams.add(new BasicNameValuePair("notify_url", url));packageParams.add(new BasicNameValuePair("out_trade_no",name));packageParams.add(new BasicNameValuePair("spbill_create_ip","127.0.0.1"));packageParams.add(new BasicNameValuePair("total_fee", total));packageParams.add(new BasicNameValuePair("trade_type", "APP"));String sign = genPackageSign(packageParams);packageParams.add(new BasicNameValuePair("sign", sign));String xmlstring =toXml(packageParams);//有轉(zhuǎn)碼錯(cuò)誤的風(fēng)險(xiǎn),參考其他人的做法要加上就可以了吧xml轉(zhuǎn)碼下return new String(xmlstring.toString().getBytes(), } catch (Exception e) {Log.e(TAG, "genProductArgs fail, ex = " + e.getMessage());return null;}}public static String genNonceStr() {Random random = new Random();return MD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());}public static String genOutTradNo() {Random random = new Random();return MD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());}/** 生成簽名*/public static 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;}public static 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();}public static void genPayReq() {req.appId = Constants.APP_ID;req.partnerId =Constants.MCH_ID;req.prepayId =WeixinPay.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);Log.e("orion", signParams.toString());}public static long genTimeStamp() {return System.currentTimeMillis() / 1000;}public static 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()).toUpperCase();Log.e("orion",appSign);return appSign;} }
    • 最后注意一點(diǎn):一定要用正式包名,就是提交給微信的簽名去支付,否則會(huì)支付失敗;有許多人支付失敗,請(qǐng)先清理微信緩存,再進(jìn)行支付,這個(gè)問(wèn)題,微信也沒(méi)給出具體的解決方案,只叫我們?nèi)デ宄彺?#xff1b;
    • 最好自己看一遍微信的文檔,雖然舊,但是看的懂大概就行;其他的工具類(lèi),全部是微信那邊提供下載的,這邊我就不提供了;^(* ̄(oo) ̄)^

    總結(jié)

    以上是生活随笔為你收集整理的接入第三方SDK-微信支付的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: eeuss一区 | 靠逼网站| 中文字幕日本视频 | 色黄网站| 4438全国最大成人网 | 色婷婷av一区二区三区之红樱桃 | 性欧美视频| 拍摄av现场失控高潮数次 | 国产精品福利在线 | 国产调教视频 | 在线精品视频播放 | 精品中文字幕视频 | 蜜臀av性久久久久蜜臀aⅴ | 狠狠躁日日躁夜夜躁 | 一级性视频 | 国产精品水嫩水嫩 | 亚洲一区二区三区激情 | 久久99精品久久久久久噜噜 | 欧美在线一区二区三区四区 | 福利小视频在线观看 | 葵司在线视频 | 国产亚洲精品久久777777 | 欧美一区二区激情视频 | 在线免费观看欧美大片 | 性色欲情网站iwww九文堂 | 亚洲av无码一区二区三区在线 | 黄色网址哪里有 | 一二三区精品 | 亚洲成人一二区 | 日韩精品人妻无码一本 | 很黄很污的视频 | 福利视频在线导航 | 日本免费高清一区二区 | 亚洲国产精品va在线看黑人 | 女生扒开尿口给男生捅 | 91网站在线免费观看 | 91成人午夜| 波多野结衣电影在线播放 | 日韩精品免费一区二区 | 永久黄色网址 | 精品久久久中文字幕人妻 | 欧美a级黄色片 | 亚洲欧美日韩精品久久 | 精品在线视频一区二区三区 | 麻豆疯狂做受xxxx高潮视频 | youjizz.com日本| 公车乳尖揉捏酥软呻吟 | 日韩av资源站 | 色婷婷视频 | 浪浪视频在线观看 | 国内精品在线观看视频 | 国产91一区在线精品 | 91麻豆视频网站 | 伊人天天干 | 天天干,天天操,天天射 | 漂亮人妻洗澡被公强 日日躁 | 香港黄色网 | 40一50一60老女人毛片 | 精品一区二区三区在线观看视频 | 免费在线日本 | 天天干天天干天天干 | 美国av片 | 澳门三级 | 亚洲小视频 | 国产网红女主播精品视频 | 黄色大全免费看 | 美国av一区二区 | 国产精品人人做人人爽 | 免费毛片一区二区三区 | 色老头影视 | 亚洲欧美bt | 亚洲成人影音 | 中文字幕一区二区三区夫目前犯 | 久久午夜网站 | 久久99精品国产91久久来源 | 91看片免费看 | 日韩videos| 黄色激情在线 | 精品久久一区二区 | 91免费高清 | 99热日本 | 精品国产成人 | 国产suv精品一区二区883 | 女性裸体瑜伽无遮挡 | 久99精品| 无码成人一区二区 | 成人91在线 | 双女主黄文 | 欧美性猛交乱大交 | 老鸭窝成人| 关之琳三级做爰 | 久久久视频在线观看 | 东北高大丰满bbbbzbbb | 日剧大尺度床戏做爰 | 老司机午夜免费福利 | 祥仔视觉av | 成人免费在线播放视频 | 欧美日韩国产一区二区三区 | 在线视频精品免费 |