您的位置:首页 > 移动开发 > 微信开发

微信支付与支付宝支付

2015-12-01 20:16 531 查看
微信支付

微信支付,主要工作在后台,前端的操作。

1 下载微信平台的签名工具获取我们测试的demo的签名如“应用签名:6fd72c23a916196fef1193285a8c6cfc”

2 将测试demo的包名也编辑到开发,信息,包名就是清单文件中的

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.sourceforge.simcpux"
android:versionCode="1"
android:versionName="1.0" >


3将测试的demo的

payActivity的

String url = "http://192.168.1.32:8080/training_v2/tl/test.do";
Button payBtn = (Button) findViewById(R.id.appay_btn);
payBtn.setEnabled(false);
Toast.makeText(PayActivity.this, "获取订单中...", Toast.LENGTH_SHORT).show();
try{
byte[] buf = Util.httpGet(url);
if (buf != null && buf.length > 0) {
String content = new String(buf);
Log.e("get server pay params:",content);
JSONObject json = new JSONObject(content);
if(null != json && !json.isNull("retcode") ){
PayReq req = new PayReq();
//req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
req.appId        = json.getString("appid");
req.partnerId     = json.getString("partnerid");
req.prepayId      = json.getString("prepayid");
req.nonceStr      = json.getString("noncestr");
req.timeStamp     = json.getString("timestamp");
req.packageValue   = json.getString("package");

里面的url地址改为我们的后台提供的地址,解析后台提供的json数据

4 已经ok了,,可以测试支付了

使用的时候appid需要修改

public class Constants {
// APP_ID 替换为你的应用从官方网站申请到的合法appId
public static final String APP_ID = "wxd930ea5d5a258f4f";

这个类的id改为我们申请的微信平台分配对应应用的id


android集成微信支付(全是坑)

一. 微信开发步骤:

1.注册registerApp

2.获取token

3.获取prepayid

4.调用sendReq

二. 服务端签名,安卓客户端具体操作如下:

1.把Constants.java,MD5.java,PayActivity.jav,util.java拷贝到项目下,复制wxapi/WXPayEntryActivity.java到项目下;

2.修改微信开放平台中后台的包名和签名,可以用腾讯开放平台的签名工具获取签名Gen_Signature_Android.apk

(1)AndroidManifest.xml中package名字和项目包名一样;

(2)AndroidManifest.xml中添加.wxapi.WXPayEntryActivity(不添加,支付成功后无法跳转到相应的通知Activity界面);

3.具体调用如下:

else if(url.endsWith(ProtocolConst.WECHAT_PAY))

{

JSONObject json = jo.getJSONObject("data");

String appid = json.getString("appid");

IWXAPI wxApi = WXAPIFactory.createWXAPI(C1_CheckOutActivity.this, appid, true);

wxApi.registerApp(appid);

if(!wxApi.isWXAppInstalled())

{

ToastView toast = new ToastView(C1_CheckOutActivity.this, "没有安装微信");

toast.setGravity(Gravity.CENTER, 0, 0);

toast.show();

return;

}

if(!wxApi.isWXAppSupportAPI())

{

ToastView toast = new ToastView(C1_CheckOutActivity.this, "当前版本不支持支付功能");

toast.setGravity(Gravity.CENTER, 0, 0);

toast.show();

return;

}

PayReq req = new PayReq();

req.appId = json.getString("appid");

req.partnerId = json.getString("partnerid");

req.prepayId = json.getString("prepayid");

req.nonceStr = json.getString("noncestr");

req.timeStamp = json.getString("timestamp");

req.packageValue = json.getString("package");

req.sign = json.getString("sign");

req.extData = "app data"; // optional

wxApi.sendReq(req);

}

4.接收支付结果的WXPayEntryActivity中的onResp函数里处理支付结果:

public void onResp(BaseResp resp) {

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

String msg = "";

if(resp.errCode == 0)

{

msg = "支付成功";

}

else if(resp.errCode == -1)

{

msg = "已取消支付";

}

else if(resp.errCode == -2)

{

msg = "支付失败";

}

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

mDialog = new MyDialog(this, "支付结果", msg);

mDialog.show();

mDialog.positive.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

mDialog.dismiss();

finish();

}

});

mDialog.negative.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

mDialog.dismiss();

finish();

}

});

}

}

三.微信遇到的具体问题:

1.在demo中找不到APP_KEY,邮箱发过来的没有此参数,对应文档找到是PaySignKey;

2.测试返回的支付结果是-1,可能产生此问题的地方:包名不一致;应用签名和后台不一致。

3.如果是客户端demo测试,记得注意价格单位是分(调用失败),body是中文的时候需要字符转换(返回错误ERR_JSON)。

客户端demo测试返回支付结果-1,记得删除微信缓冲数据(设置-》应用程序管理器->选中微信->清除数据)

可以用demo里的debug.keystore来测试,功能修改目录:preferences->android->build->custom debug
keystore->browse。

重要提示,当返回提示-1时,不一定是代码出错,可能是多次请求未支付,被微信拉黑,此时清除微信数据一下试试。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: