微信支付开发者文档介接入

好了,多余的话不过多解释,下面咋们大家一起来看看微信的SDK接入文档




如果哥们急的话请调到://www.greatytc.com/p/1015841aae48(直接下载Demo填写正确信息直接调起支付)



更新第二版Demo://www.greatytc.com/p/1015841aae48





排版2://www.greatytc.com/p/c417ce674eb3

可能介入的不是太好,重在学习,学习哈,跟着我的思路来,一定要有耐心,微信坑很多,先看下参数(重要)

给一个获取IP的地址: http://pv.sohu.com/cityjson?ie=utf-8

测试微信数据接口 : https://pay.weixin.qq.com/wiki/tools/signverify/

微信参数

Demo:链接: https://pan.baidu.com/s/1eS1tyWM 密码: 3xih

WRNING!!!!

在类:WX_DATA_XINHAO_HAN设置微信信息

在类AliPay_XINHAO_HAN_DATA设置支付宝信息


appid: 你的APPID

mch_id : 商户号

nonce_str : 生成的随机字符串

body : 商品详情

out_trade_no : 时间

total_fee : 金额

spbill_create_ip : IP地址

notify_url : 回调成功后调用的地址

trade_type : 支持类型(写死 "APP")

步骤1:你先去注册微信官网的一些信息然后获取以下这3个东西

1.APPID 2.你的商户号 3.秘钥

就这几个东西

信息


基础信息 nonce_str : 生成的随机字符串

随机字符串生成:

一般都是固定的,自己也懒得写所以找了一个,如果要自己写的话给你提供一些思路

首先把 A-Z 0-9 写到一个String数组中,然后通过Random取索引 for 32次即可

我们看下网上的吧

MD5

MD5方法

代码复制

排版真难受,这玩意连个代码引用都没有??????


这个使用方法是这样的


MD5的使用方法

代码复制

```

//生成随机字符串

public staticStringgenNonceStr() {

Random random =newRandom();

returnMD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());

}

```

-----------------------

```

public final staticStringgetMessageDigest(byte[] buffer) {

charhexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

try{

MessageDigest mdTemp = MessageDigest.getInstance("MD5");

mdTemp.update(buffer);

byte[] md = mdTemp.digest();

intj = md.length;

charstr[] =new char[j *2];

intk =0;

for(inti =0;i < j;i++) {

bytebyte0 = md[i];

str[k++] = hexDigits[byte0 >>>4&0xf];

str[k++] = hexDigits[byte0 &0xf];

}

return newString(str);

}catch(Exception e) {

return null;

}

}

```

基础信息 out_trade_no : 时间

这个应该都会把,就是使用JAVA获取你自己当前的时间格式为

比如:2017年7月17日就写成2017717

基础信息 spbill_create_ip : IP地址


使用网路访问:http://pv.sohu.com/cityjson?ie=utf-8

会给你返回 var returnCitySN = {"cip": "219.144.202.177", "cid": "610100", "cname": "陕西省西安市"};

你自己截取一下就OK了

基础信息 notify_url : 回调成功后调用的地址


后台暂时没有提供接口的话就随便写


基础信息 mch_id : 商户号 

你的商户号

基础信息 body : 商品详情

随意写

基础信息 total_fee : 金额

随意写

好了基本的功能数据都介绍完了

导入微信的Sdk

Android Studio适用

--------------------------------

compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'


把刚才的几个参数生成一下sign



签名生成


到这里了,你会问OrederSendInfo info是个什么鬼??????

记住:WX_DATA_XINHAO_HAN.API_KEY 是你自己的秘钥


别急老规矩先复制代码

```

//生成预支付随机签名

public staticStringgenSign(OrederSendInfo info) {

StringBuffer sb =newStringBuffer(info.toString());

if(WX_DATA_XINHAO_HAN.API_KEY.equals("")) {

Toast.makeText(UIUtils.getContext(),"APP_ID为空",Toast.LENGTH_LONG).show();

}

//拼接密钥

sb.append("key=");

sb.append(WX_DATA_XINHAO_HAN.API_KEY);

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

Log.e("Sign-------------","genSign: "+ appSign.toUpperCase());

returnappSign.toUpperCase();

}

```


好了现在给你解释一下这个是个什么鬼OrederSendInfo info方法参数

这个其实就是一个Bean

看代码

```

public classOrederSendInfo {

privateStringappid;

privateStringmch_id;

privateStringnonce_str;

privateStringbody;

privateStringout_trade_no;

privateStringtotal_fee;

privateStringspbill_create_ip;

privateStringnotify_url;

privateStringtrade_type;

privateStringsign;

publicOrederSendInfo(String appid,String mch_id,String nonce_str,String body,String out_trade_no,String total_fee,String spbill_create_ip,String notify_url,String trade_type) {

this.appid= appid;

this.mch_id= mch_id;

this.nonce_str= nonce_str;

this.body= body;

this.out_trade_no= out_trade_no;

this.total_fee= total_fee;

this.spbill_create_ip= spbill_create_ip;

this.notify_url= notify_url;

this.trade_type= trade_type;

}

publicStringgetAppid() {

returnappid;

}

public voidsetAppid(String appid) {

this.appid= appid;

}

publicStringgetMch_id() {

returnmch_id;

}

public voidsetMch_id(String mch_id) {

this.mch_id= mch_id;

}

publicStringgetNonce_str() {

returnnonce_str;

}

public voidsetNonce_str(String nonce_str) {

this.nonce_str= nonce_str;

}

publicStringgetBody() {

returnbody;

}

public voidsetBody(String body) {

this.body= body;

}

publicStringgetOut_trade_no() {

returnout_trade_no;

}

public voidsetOut_trade_no(String out_trade_no) {

this.out_trade_no= out_trade_no;

}

publicStringgetTotal_fee() {

returntotal_fee;

}

public voidsetTotal_fee(String total_fee) {

this.total_fee= total_fee;

}

publicStringgetSpbill_create_ip() {

returnspbill_create_ip;

}

public voidsetSpbill_create_ip(String spbill_create_ip) {

this.spbill_create_ip= spbill_create_ip;

}

publicStringgetNotify_url() {

returnnotify_url;

}

public voidsetNotify_url(String notify_url) {

this.notify_url= notify_url;

}

publicStringgetTrade_type() {

returntrade_type;

}

public voidsetTrade_type(String trade_type) {

this.trade_type= trade_type;

}

publicStringgetSign() {

returnsign;

}

public voidsetSign(String sign) {

this.sign= sign;

}

//注意排序规则ASCII排序(一般按照A-Z,a-z)就行

@Override

publicStringtoString() {

return"appid="+appid+'&'+

"body="+body+'&'+

"mch_id="+mch_id+'&'+

"nonce_str="+nonce_str+'&'+

"notify_url="+notify_url+'&'+

"out_trade_no="+out_trade_no+'&'+

"spbill_create_ip="+spbill_create_ip+'&'+

"total_fee="+total_fee+'&'+

"trade_type="+trade_type+'&';

}

}

```


//记住在你调用的时候一定要在这个Bean里边赋值,明白不,然后传递给sign的方法签名就生成成功了

签名生成完成了




开始上传数据获取预支付接口


这里边有个XStream你可能找不到

在Studio里边加入这段

```

compile ('com.thoughtworks.xstream:xstream:1.4.7') {

excludegroup:'xmlpull',module:'xmlpull'

}

```

重新编译一下


代码复制

```

public static voidUnfiedOrder(OrederSendInfo orederSendInfo, finalListerner listerner) {

//生成sign签名

String sign = WXpayUtils.genSign(orederSendInfo);

//生成所需参数,为xml格式

orederSendInfo.setSign(sign.toUpperCase());

XStream xstream =newXStream();

xstream.alias("xml",OrederSendInfo.class);

finalString xml = xstream.toXML(orederSendInfo).replaceAll("__","_");

Log.e("xml---------------","UnfiedOrder: "+ xml);

//调起接口,获取预支付ID

OkHttpUtils.ResultCallback resultCallback =newOkHttpUtils.ResultCallback() {

@Override

public voidonSuccess(String response) {

Log.e("返回的数据","onSuccess: "+ response);

String data = response;

data = data.replaceAll("","");

listerner.Success(data);

}

@Override

public voidonFailure(Exception e) {

listerner.Faiulre(e.toString());

}

};

try{

OkHttpUtils.post(WX_DATA_XINHAO_HAN.UNIFIED_ORDER,resultCallback, newString(xml.getBytes("UTF-8"),"ISO8859-1"));

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

}

}

```


至于里边的Listnener

在这里


接口

代码复制

```

public interfaceListerner {

voidSuccess(String data);

voidFaiulre(String data);

}

```

拿到微信端的数据之后,直接掉起微信支付


调起微信支付

开始填充数据


填充数据




特别感谢:掘墓人

博客地址://www.greatytc.com/p/9a3127cfda4d

我通过他所给的DEMO集成出了一套及简单的Demo


下载地址: 链接: https://pan.baidu.com/s/1c2zURjq 密码: jpr5


使用方法:你的这几个部位可能会报错注意,注意!!!!!!!!!!


WXActivity


因为微信很吊,你必须按照人家的来,直接在我那个工具包下创建一个Activity名字叫WXEntryActivity


你在你自己创建的Activity-->WXEntryActivity的这个方法下


直接复制这段代码

```

WxMain.setStringOnListener(WXEntryActivity.this);

//如果是支付

WxMain.WXMessage wxMessage;

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

intcode = baseResp.errCode;

switch(code) {

case0:

if(wxMessage!=null)

wxMessage.message("支付成功",0,"0.0");

//支付成功

break;

case-1:

if(wxMessage!=null)

wxMessage.message("支付失败",-1,"0.0");

//支付失败

finish();

break;

case-2:

if(wxMessage!=null)

wxMessage.message("支付取消",-2,"0.0");

//支付取消

finish();

break;

default:

if(wxMessage!=null)

wxMessage.message("支付失败",-3,"0.0");

//支付失败

setResult(RESULT_OK);

finish();

break;

}

return;

}

```


使用是这样的:


使用

第一个为你的商品描述,第二个为金额,回调只有0是成功的

0 成功

-1 支付失败

-2 支付取消

-3 支付失败

使用的话直接复制进去就可以了

总而言之微信相比之下还要比支付宝麻烦

说白了就是加密数据发送再给你解析一下数据然后在调起支付,大致就这两个步骤

工具可能会用到的东西

compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

compile ('com.thoughtworks.xstream:xstream:1.4.7') {

excludegroup:'xmlpull',module:'xmlpull'

}

compile'com.zhy:okhttputils:2.4.1'


第二个如果你自己想拼的话就不用了,工具里边是XML的解析器生成的XML

有时间会给大家讲解一些OKHttp底层RXJAVA ,Kotlin,Android源码,

一起加油,0.0哈哈.


0.0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容

  • 好了,多余的话不过多解释,下面咋们大家一起来看看微信的SDK接入文档可能介入的不是太好,重在学习,学习哈,跟着我的...
    XINHAO_HAN阅读 1,926评论 0 0
  • 引言 秋高气爽,天气转凉,正是学习工作做的好时候。(~ ̄▽ ̄)~~(~ ̄▽ ̄)~ 我是个phper最近在写微信支付...
    恩就是这个名阅读 7,933评论 2 15
  • 今天二月二,俗称龙抬头。不知是否是龙王发威,昨天一股春天景象的大晴天转眼变成了春雨纷纷。这种天气最容易在家里无所事...
    小米火烧nalakuvara阅读 289评论 0 1
  • 这里说的,是辩论,而不是辩论赛。 不是那种唇枪舌剑大秀精妙语句的比赛,不是那种一心要把别人打倒证明自己正确的心态,...
    Shirley千墨阅读 2,181评论 0 0
  • 到了广州,又有了夏天的感觉,和同事聊了聊,似又离重庆近了些。原本上周末打算写下这篇文字,奈何没时间,只得一拖再拖,...
    大鹏_29wp阅读 177评论 0 0