def pay_notify(request): result = '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名失败]]></return_msg></xml>' try: if request.method == 'POST': print 'pay notify post' try: req_data = json.loads(request.body) except: req_data = utils.xml_to_dict(request.body) req_sign = req_data['sign'] _req_data = req_data.copy() _req_data.pop('sign') sign = utils.GetPaySign(_req_data) print req_data print req_sign, sign if req_sign == sign and req_data[ 'return_code'] == 'SUCCESS' and req_data[ 'result_code'] == 'SUCCESS': reward = Reward.objects.get(trade_no=req_data['out_trade_no']) reward.transaction_id = req_data['transaction_id'] reward.state = 1 reward.save() result = '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>' else: print 'pay notify get' except Exception as err: logger.error(str(err)) return HttpResponse(result)
def post_xml(self): sign = calculate_sign(self.params, self.api_key) xml = dict_to_xml(self.params, sign) print xml response = post_xml(self.url, xml) print '*' * 5, response.text return xml_to_dict(response.text)
def test_xml_to_dict(self): xml = "<a>xxx</a>" sign, result = xml_to_dict(xml) self.assertEqual(sign, None) self.assertEqual(result, None) xml = "<xml><a>xxx</a></xml>" sign, result = xml_to_dict(xml) self.assertEqual(sign, None) self.assertEqual(len(result), 1) self.assertEqual(result["a"], "xxx") xml = "<xml><a>xxx</a><b>yyy</b></xml>" sign, result = xml_to_dict(xml) self.assertEqual(len(result), 2) self.assertEqual(result["a"], "xxx") self.assertEqual(result["b"], "yyy") xml = "<xml><a>xxx</a><b>yyy</b><c><![CDATA[zzz]]></c></xml>" sign, result = xml_to_dict(xml) self.assertEqual(len(result), 3) self.assertEqual(result["a"], "xxx") self.assertEqual(result["b"], "yyy") self.assertEqual(result["c"], "zzz") xml = """<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[wx12233445566778899]]></appid> <mch_id><![CDATA[12345678]]></mch_id> <nonce_str><![CDATA[Sv9ATOOBtYWvtUQs]]></nonce_str> <sign><![CDATA[0C638718BE0316E9B16E57DC869D2CD1]]></sign> <result_code><![CDATA[SUCCESS]]></result_code> <prepay_id><![CDATA[wx20141117135919f494cdaadb0287308957]]></prepay_id> <trade_type><![CDATA[NATIVE]]></trade_type> <device_info><![CDATA[]]></device_info> <code_url><![CDATA[weixin://wxpay/bizpayurl?sr=GnZnlWr]]></code_url></xml>""" sign, result = xml_to_dict(xml) self.assertEqual(sign, "0C638718BE0316E9B16E57DC869D2CD1") self.assertEqual(len(result), 9) self.assertEqual(result["return_code"], "SUCCESS") self.assertEqual(result["return_msg"], "OK") self.assertEqual(result["result_code"], "SUCCESS") self.assertEqual(result["code_url"], "weixin://wxpay/bizpayurl?sr=GnZnlWr") self.assertEqual(result.get("device_info", None), None)
def get_exercises(self): transaction = self.accesslink.training_data.create_transaction( user_id=self.config['user_id'], access_token=self.config['access_token']) if not transaction: print('No new exercises available.') return resource_urls = transaction.list_exercises()['exercises'] for url in resource_urls: exercise_summary = transaction.get_exercise_summary(url) gpx_data = transaction.get_gpx(url) tcx_data = transaction.get_tcx(url) hr_data = transaction.get_heart_rate_zones(url) samples_data = transaction.get_available_samples(url) sample_data = transaction.get_samples(url) print('Exercise summary:') utils.pretty_print_json(exercise_summary) time = utils.polar_datetime_to_python_datetime_str( str(exercise_summary['start-time'])) utils.save_json_to_file( exercise_summary, f'exercises_data/summary_data_{time}.json') if gpx_data: # not empty dict. If there is no data, this variable will have '{}' value utils.save_json_to_file( utils.xml_to_dict(gpx_data), f'exercises_data/gpx_data_{time}.json') if tcx_data: utils.save_json_to_file( utils.xml_to_dict(tcx_data), f'exercises_data/tcx_data_{time}.json') if hr_data: utils.save_json_to_file(hr_data, f'exercises_data/hr_data_{time}.json') if samples_data: utils.save_json_to_file( samples_data, f'exercises_data/samples_data_{time}.json') if sample_data: utils.save_json_to_file( sample_data, f'exercises_data/sample_data_{time}.json') transaction.commit()
def post_xml(self): sign = calculate_sign(self.params, self.api_key) xml = dict_to_xml(self.params, sign) response = post_xml(self.url, xml) return xml_to_dict(response.text)